基础算法学习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 。

猜你喜欢

转载自www.cnblogs.com/panboo/p/10081768.html