1. 程式人生 > >基礎演算法學習3-大數加法

基礎演算法學習3-大數加法

一、演算法題目

  計算兩個非常大非負整數的和。

二、解題程式碼:

 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 。