問題描述:
假設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的取值範圍遠遠大於資料型別給定的範圍,不能滿足較大規模的高精度數值計算...