[模板]大数加法

最近两场训练赛都有用到大数加法,但我又不想用java写,就整理了一下c++的大数加法模板.

本文基于老笨猫https://www.cnblogs.com/ronzhang-536/articles/4049551.html的代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int amn=1e5+5;
 4 struct BigNum{
 5     char in[amn];
 6     int len,s[amn];
 7     void getNum(){
 8         len=strlen(in);
 9         for(int i=0;i<len;i++)
10             s[i]=in[len-1-i]-'0';
11     }
12     void add(BigNum a,BigNum b){
13         len=0; ///设当前长度位零
14         int x,g=0; ///x为本位,g为低位进位
15         for(int i=0;g||i<max(a.len,b.len);i++){ ///若最后有进位(g不为0)则继续
16             x=g;
17             if(i<a.len)x+=a.s[i];
18             if(i<b.len)x+=b.s[i];
19             s[len++]=x%10;
20             g=x/10;
21         }
22     }
23     void reverse(){ ///反转输出
24         for(int i=0;i<len/2;i++){
25             int tmp=s[len-1-i];
26             s[len-1-i]=s[i];
27             s[i]=tmp;
28         }
29 
30     }
31 }a,b,c;
32 int main(){
33     while(cin>>a.in>>b.in){
34         a.getNum();
35         b.getNum();
36         c.add(a,b);
37         c.reverse();
38         for(int i=0;i<c.len;i++){
39             printf("%d",c.s[i]);
40         }
41         printf("\n");
42     }
43 }

猜你喜欢

转载自www.cnblogs.com/brainm/p/11205315.html
今日推荐