使用的是模擬手算的方法
例如:123456+123412
3456
+123
4=12
4690
我們手算時都是從最右邊開始豎著的那位相加的,依次向左重複豎著相加
//s1長度長,s2短
//這裡使用引用引數(&)是為了不要再生成s1,s2字串
void
add(string& s1, string& s2)
if(cnt ==1)
(*longstr)
="1"+(
*longstr)
;return
(*longstr);}
intmain()
else
//相加
add(
*p1,
*p2)
;return0;
}
注意這兩句
longstr = s1.
length()
>= s2.
length()
?&s1 :
&s2;
shortstr = s1.
length()
< s2.
length()
?&s1 :
&s2;
不能同時使用<
或>
號,因為如果兩個字串長度相等時,這兩個字元指標會指向同乙個字串。
為了使用方便,一邊會選擇重構+號,使+能夠對字串進行我們這個高精度正整數加法
//過載+
string operator
+(string &s1, string &s2)
if(cnt ==1)
(*longstr)
="1"+(
*longstr)
;return
(*longstr)
;}
高精度整數加法 OJ
在計算機中,由於處理器位寬限制,只能處理有限精度的十進位制整數加減法,比如在32位寬處理器計算機中,參與運算的運算元和結果必須在 231 231 1之間。如果需要進行更大範圍的十進位制整數加法,需要使用特殊 的方式實現,比如使用字串儲存運算元和結果,採取逐位運算的方式。如下 9876543210 1...
高精度 大整數加法
求兩個不超過200位的非負整數的和。有兩行,每行是乙個不超過200位的非負整數,可能有多餘的前導0。一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。22222222222222222222 33333333333333333333 本題考察的是高精度計算...
高精度正整數乘法問題
給定任意兩個高精度正整數a b,計算a與b的乘積。輸入檔案中有若干行,每一行上有兩個用字串表示的正整數a,b。輸入直到檔案結束。對每個輸入行上的兩個正整數a,b,在一行上先輸出形式a b 接著輸出a與b的積。12345 6788466 345 66 12345 6788466 83803612770...