長整數加法運算 大數運算

2021-10-07 20:38:12 字數 2705 閱讀 6216

問題描述:

假設2個任意長度的整數x、y分別由雙向鍊錶a和b儲存,現要求設計乙個演算法,實現x+y。計算結果儲存在鍊錶c中。

說明:由於a和b輸出時需要從頭至尾遍歷,而做加法時需要從尾至頭遍歷,因此使用雙向鍊錶儲存。

可以從長整數的低位開始拆分(4位為一組,即不超過9999的非負整數),依次存放在鍊錶的每個結點的資料域中;頭結點的資料域存放正負數標誌(正數或0:1,負數:-1)。

輸入說明:

第一行:長整數x

第二行:長整數y

輸出說明:

第一行:格式化後的長整數x(從低位到高位每4位用",「分開)

第二行:格式化後的長整數y(從低位到高位每4位用」,「分開)

第三行:空行

第四行:單鏈表c的遍歷結果

第五行:格式化後的計算結果(從低位到高位每4位用」,"分開)

(輸入與輸出之間用一空行分隔)

輸入:-53456467576846547658679870988098

435643754856985679

輸出:-5345,6467,5768,4654,7658,6798,7098,8098

43,5643,7548,5698,5679

5345->6467->5768->4611->2014->9250->1400->2419

-5345,6467,5768,4611,2014,9250,1400,2419

模擬題需要乙個具體的步驟,使得思路清晰

首先是將所給的字串轉化為鍊錶,這個步驟相對較為簡單,每四位一取就可以了。

構建好每個鍊錶後就可以進行運算了,這個時候就要考慮兩個數做的是加法還是減法運算。若進行加法運算,就直接進行,這裡所用到的思想類似於歸併排序。做加法運算時,進製位要注意最後結果如果比原鍊錶長,則需要再新增。(例如 9999+1=10000)

做減法的時候,首先要進行比較絕對值的大小,通常運算都是大數減去小數,運算的時候較為方便。同樣對借位位的考慮需要仔細。

最後就是輸出,輸出的時候需要考慮中間有的資料為0,需要補0輸出。首部為0,則不輸出等。

ac**:

#include

#include

#include

#include

using

namespace std;

struct num

;num *

creatnum

(string s)

count--;}

}else

count--;}

}}else

count--;}

}else

count--;}

}}p-

>next=head;

head-

>pre=p;

return head;

}void

display

(num* head)

if(p!=head)

while

(p!=head)

cout << endl;

}void

my_print

(num* head)

if(head-

>data ==-1

)cout <<

"-";

if(p!=head)

while

(p!=head)

cout << endl;

}num *

add(num* a, num *b)

while

(pa!=a)

while

(pb!=b)

if(carry==1)

return head;

}int

judge

(string s1, string s2)

if(flag)

return0;

}}else

if(flag)

return0;

}}}num *

sub(num *a, num *b)

else

pa=pa-

>pre;

pb=pb-

>pre;

temp-

>next=head-

>next;

temp-

>pre=head;

head-

>next-

>pre=temp;

head-

>next=temp;

}while

(pa!=a)

else

pa=pa-

>pre;

temp-

>next=head-

>next;

temp-

>pre=head;

head-

>next-

>pre=temp;

head-

>next=temp;

}return head;

}int

main()

else

else

if(flag==1)

res=

sub(a, b)

;else

res=

sub(b, a);}

display

(res)

;my_print

(res)

;return0;

}

大數運算 加法

include include include void add const char a,const char b,char c if carry 0 result result length carry 0 while result length 0 c result result length...

大數運算 加法

究竟為什麼要用大數加法呢。我們來看下資料 bool型為布林型,佔1個位元組,取值0或1。bool型為int型,一般認為佔4個位元組,取值true false error。sbyte型為有符號8位整數,佔1個位元組,取值範圍在128 127之間。bytet型為無符號16位整數,佔2個位元組,取值範圍在...

大數運算 整數的加法和乘法

大家剛開學的時候肯定都做過 a b吧?今天給大家出一道 a bplus版 給定兩個整數a和 b,計算 a b 的和。a和 b的範圍都是0 1e1000 這道題我們還能用 int或者 long long 來做嗎?這時候,由於a和 b的取值範圍遠遠大於資料型別給定的範圍,不能滿足較大規模的高精度數值計算...