[模板]大数加法
最近两场训练赛都有用到大数加法,但我又不想用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 }