c 大數加法

2022-04-06 14:01:56 字數 2660 閱讀 5315

在c#中,我們經常需要表示整數。但是,c#的基本資料型別中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之間的數。貨幣型別也不是無限大。如果我們需要表示更大的數,就需要用到一定的演算法來完成。

這次,我和大家一起討論一下c#的大數運算之加法。

這次,我們只考慮正數的整數加法。

我們的**要封裝到乙個結構裡面。這個結構的結構先擺出來。

public

struct

bigint

我們的思路是讀取乙個string表示的大數,然後通過演算法來計算,返回乙個string型別的結果。

為了便於計算,我們首先要把賦值過來的的string轉換為乙個int陣列。這個陣列就是**裡的num陣列。

我們要把這個數的個位存到num[0]裡,十位存到num[1]裡,以此類推。於是我新增了乙個建構函式。

public bigint(string theint):this

()

}

例如 呼叫bigint(「123」) 時,num[0]=3,num[1]=2,num[2]=1 length=2 (為了方便,這裡的length是指數組的座標上限,不是陣列元素的個數)

我們如果能直接把string賦給bigint型別的變數該多方便啊,那麼我們現在就來實現它。 怎麼實現呢?其實把一種資料型別變數賦值給另一種時,都需要轉換,為什麼有的可以直接賦值呢,是因為這裡進行的是隱式轉換。所以我們就來編寫從string到bigint的隱式轉換。**和建構函式類似。

public

static

implicit

operator bigint(string

theint)

return

b; }

implicit說明轉換方式是隱式轉換。operator是各種轉換和操作符的標誌。

當然,較小的數也可以直接從int轉過來。所以再寫乙個int=>bigint的隱式轉換。

public

static

implicit

operator bigint(long

theint2)

準備工作做好了,現在開始計算過程。

在這裡,我們通過模擬學生列豎式的方法來計算。首先要從最低位也就是個位加起,滿10要向高位進1,也就是陣列的下乙個元素的值加一。我們直接重寫+操作符,**見下

public

static bigint operator +(bigint b1, bigint b2)

//確定更新後的位數

big=199

;

while (b3.num[big] == 0&&big!=0

) b3.length =big;

return

b3; }

public static bigint operator +(bigint b1, bigint b2)這一句,bigint是加法返回的結果的型別;operator +說明重寫的是加法,(bigint b1, bigint b2)是兩個加數。計算原理是豎式的加法計算。

**裡我加入了注釋,應該可以看懂

最後,為了顯示bigint型別的值,我們編寫乙個由bigint到string的隱式轉換。

public

static

implicit

operator

string

(bigint theint)

return

b; }

由於存入陣列時時從低位到高位的,所以我們輸出string時要反轉回來。

至此,大數加法編寫完成。下面是**清單。

public

struct

bigint

public

static

implicit

operator bigint(string

theint)

return

b; }

public

static

implicit

operator bigint(long

theint2)

#endregion

public

static

implicit

operator

string

(bigint theint)

return

b; }

public static bigint operator +(bigint b1, bigint b2)

//確定更新後的位數

big=199;

while (b3.num[big] == 0&&big!=0)

b3.length =big;

returnb3;

}

}

另外注,此貼純屬技術研究,如需大數運算,.net有專門的型別,無需自己寫**。至於型別是什麼,你們自己去找吧。o(∩_∩)o~

大數 加法 c語言

最近遇到乙個關於大數的問題頓時感覺好方,決定系統學一下大數。注意 關於大數問題,由於陣列不好界定輸入數的大小 陣列的長度 因此主要思想就是先用字串輸入儲存在字串陣列中,再逆序存入整形陣列進行最後逐位運算。剛開始通過部落格寫的 思路 輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同...

C語言大數加法

當計算兩個較大的數的和時,可能c語言中的型別諸如int,long,long long型都無法表示時,此時應該換一種思維,將數看成是字串,採用字元陣列的方法進行儲存與運算。同時,應該注意到字元陣列的儲存方式,在字元陣列中,低位位址存放的是字元陣列的高位,所以執行加法時,應該從陣列下標大的位址開始加。以...

大數加法(C 實現)

問題 1513 藍橋杯 演算法提高vip 大數加法 題目描述 輸入兩個正整數a,b,輸出a b的值。輸入兩行,第一行a,第二行b。a和b的長度均小於1000位。輸出一行,a b的值。樣例輸入 4 2樣例輸出 6 includeusing namespace std typedef long long...