高精度整數加法 OJ

2021-07-29 09:52:33 字數 2079 閱讀 4869

在計算機中,由於處理器位寬限制,只能處理有限精度的十進位制整數加減法,比如在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時』+』不出現在輸出字串,結果為負時輸出字串最左邊位置為』-『。

輸入兩個字串

輸出給求和後的結果

9876543210

1234567890

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 倒著存,...