在計算機中,由於處理器位寬限制,只能處理有限精度的十進位制整數加減法,比如在32位寬處理器計算機中,參與運算的運算元和結果必須在-231~231-1之間。如果需要進行更大範圍的十進位制整數加法,需要使用特殊
的方式實現,比如使用字串儲存運算元和結果,採取逐位運算的方式。如下:
9876543210 + 1234567890 = ?
讓字串 num1=」9876543210」,字串 num2=」1234567890」,結果儲存在字串 result = 「11111111100」。
-9876543210 + (-1234567890) = ?
讓字串 num1=」-9876543210」,字串 num2=」-1234567890」,結果儲存在字串 result = 「-11111111100」。
要求程式設計實現上述高精度的十進位制加法。
要求實現方法:
public string add (string num1, string num2)
【輸入】num1:字串形式運算元1,如果運算元為負,則num1的字首為符號位』-』
num2:字串形式運算元2,如果運算元為負,則num2的字首為符號位』-』
【返回】儲存加法計算結果字串,如果結果為負,則字串的字首為』-』
注: (1)當輸入為正數時,』+』不會出現在輸入字串中;當輸入為負數時,』-『會出現在輸入字串中,且一定在輸入字串最左邊位置;
(2)輸入字串所有位均代表有效數字,即不存在由』0』開始的輸入字串,比如」0012」, 「-0012」不會出現;
(3)要求輸出字串所有位均為有效數字,結果為正或0時』+』不出現在輸出字串,結果為負時輸出字串最左邊位置為』-『。
輸入兩個字串
輸出給求和後的結果
98765432101234567890
11111111100
閱讀原文#include
#include
#define n 10000
using
namespace
std;
void longadd1(string s1,string s2) //兩個正數相加的時候
,b[n]= ;
for (int i=0; i1-i]-'0';
for (int i=0; i1-i]-'0';
int len=(len1>len2 ? len1:len2);
for (int i=0; iif (a[i]>=10)
}if (a[len])
cout
=0; i--)
cout
s2,b[n]= ;
for (int i=0; i1-i]-'0';
for (int i=0; i1-i]-'0';
for (int i=0; iif (a[i]<0)
}for (int i=len1-1; i>=0; i--) //記錄有幾個零
for (int i=len1-1-count; i>=0; i--)
cout
s2.erase(s2.begin());
int k1=s1.size();
int k2=s2.size();
if(k1>k2)
else
if (s1==s2) //如果兩數相等
cout
<
if(s1>s2) //結果為正
minusstring(s1,s2);
else
}int main()
else
//一正一負時
longminus(m,n);
return
0;}
高精度正整數加法
使用的是模擬手算的方法 例如 123456 123412 3456 123 4 12 4690 我們手算時都是從最右邊開始豎著的那位相加的,依次向左重複豎著相加 s1長度長,s2短 這裡使用引用引數 是為了不要再生成s1,s2字串 void add string s1,string s2 if cn...
高精度 大整數加法
求兩個不超過200位的非負整數的和。有兩行,每行是乙個不超過200位的非負整數,可能有多餘的前導0。一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。22222222222222222222 33333333333333333333 本題考察的是高精度計算...
python高精度加法 高精度加法
1.思路 其實就是模擬,加法是最簡單的,從個位開始加,價位加到前一位,然後再取10的餘數。for int i 1 i len i 計算和 c i a i b i 進製 c i 1 c i 10 取10的餘數 c i 10 2.實現 int len max a.length b.length 倒著存,...