基礎演算法學習3-大數加法
阿新 • • 發佈:2018-12-07
一、演算法題目
計算兩個非常大非負整數的和。
二、解題程式碼:
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int main() { 6 char a[500+5], b[500+5]; 7 int c[500+5] = {0}; 8 long long int i=0,j=0,k=0; 9 int r=0, temp=0; 10 cin>>a>>b; 11 for(i=strlen(a)-1,j=strlen(b)-1; i>=0&&j>=0; i--,j--){ 12 temp = a[i]-'0'+b[j]-'0'+r; 13 r = temp/10; 14 c[k++] = temp%10; 15 } 16 while(i>=0){ 17 temp = a[i]-'0'+r; 18 r = temp/10; 19 c[k++] = temp%10; 20 i--; 21 } 22 while(j>=0){ 23 temp = b[j]-'0'+r; 24 r = temp/10; 25 c[k++] = temp%10; 26 j--; 27 } 28 if(r){ 29 c[k++] = r; 30 } 31 while(k){ 32 cout<<c[k-1]; 33 k--; 34 } 35 // for(int m=k-1; m>=0; m--){ 36 // cout<<c[m]; 37 // } 38 return 0; 39 }
三、解題反思
1、超過10~20位的整數就不方便使用int或long long來定義,只能使用字元陣列。
2、如何將問題拆解成邏輯相似的兩個部分,也就是位數相同的一個部分和剩餘部分。
3、巧妙使用進位變數 r 。