在實現簡單的加法時,我們大都會採用直接相加輸出結果,但是如果兩個數非常大,已經超出了c++基本資料型別的表示範圍時,該如何解決?
c++幾種基本資料型別:
int 整型 4位元組 範圍:-2147483648 ~ 2147483647
float 實型(單精度) 4位元組 範圍:1.18*10@-38 ~ 3.40*10@38 7位有效位(多少次方符號不能顯示,以@代替,下同)
double 實型(雙精度) 8位元組 範圍:2.23*10@-308 ~ 1.79*10@308 15位有效位可見,如果需要計算大數相加,這些基本型別能力也有限。
現提供一種方法解決大數相加,基於string字串,大家都知道,string可以表示很長的字元,string 的長度可以是零個字元至大約二十億個字元。將需要相加的數存為string型別,在想辦法將兩個數相加即可解決問題。如果學過資料結構,可以有更好的解決方法,如嘗試使用鍊錶等可以解決問題,大數相乘等,同樣可以使用鍊錶等資料結構解決。
示例:計算123456789987654321+987654321012345 = ?時,先將兩個加數存為string型別,再從兩個加數的末尾開始,乙個數乙個數的相加,跟做普通加法乙個原理,只是這裡需要注意的是,兩個加數的型別為字串,所以如果將其中的數字直接相加,其實是不對的如,如上述問題,中末尾分別為1和5,如果直接相加,則是字元在相加如:
string a1 = "1";
string a2 = "5";
cout輸出結果為:
很顯然這不是我們需要的答案,我們想要的是1+5=6;
這裡有乙個解決方法:在計算的時候將每乙個數都減去字元『0』,這樣得到的即為我們需要的數。
c++**如下:
#include #include using namespace std;
void main()
while(a2.length() > min)
//將res反向輸出
cout<
{ cout
C語言大數相加
當要執行相加的兩個數超出c語言所能表示的範圍時,就不能用正常的加法運算來執行相加操作,這時候可以用兩個字元陣列接收要相加的兩個大數,然後從兩個大數的地位進行按位相加,並設定乙個進製標誌,如果標誌為1,表示有進製,否則沒有進製。要注意的是字元陣列的地位為數字的高位,所以要從陣列下標大的地方開始相加。i...
C語言 大數相加
問題描述 實現a b c 其中a b位數超過100位 演算法思想 大數使用字串儲存,每乙個單元儲存運算元的每一位,之後執行位相加。基本思路 字串反轉 字元變數字 位運算 反序輸出 c語言 include include define max 101 void print char sum void ...
C 實現大數相加
在c 中,我們經常需要表示整數。但是,c 的基本資料型別中,最大的long也只能表示 9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之間的數。如果我們需要表示更大的數,就需要用到一定的演算法來完成。這次,我給大家分享一下c 的大數運算之加法...