1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include<cstdio> #include<cstring> struct node{ int len,a[510]; node(){//初始化 len=0; memset(a,0,sizeof a); } }; int mymax(int x,int y){//x y中最大的 return x>y? x : y; } node plus(node n1,node n2){ //1.初始化 node n0;//n0=n1+n2 n0.len=mymax(n1.len,n2.len); //2.模拟加法,但不进位 for(int i=1;i<=n0.len;i++){ n0.a[i]=n1.a[i]+n2.a[i]; } //3.加完后,再统一进位 for(int i=1;i<=n0.len;i++){ n0.a[i+1]+=n0.a[i]/10; n0.a[i]%=10; } //4.研究最高位是哪一位 int i=n0.len; while(n0.a[i+1]>0){ i++; n0.a[i+1]+=n0.a[i]/10; n0.a[i]%=10; } while((n0.a[i]==0)&&i>1) i--; n0.len=i; return n0; } int main(){ char st[511]; node n0,n1,n2; //读取时个位放在第一个 scanf("%s",st+1); n1.len=strlen(st+1); for(int i=1;i<=n1.len;i++) n1.a[n1.len-i+1]=st[i]-'0';//每个st[i]都找到对应的位置 scanf("%s",st+1); n2.len=strlen(st+1); for(int i=1;i<=n2.len;i++) n2.a[n2.len-i+1]=st[i]-'0'; n0=plus(n1,n2); for(int i=n0.len;i>=1;i--) printf("%d",n0.a[i]); return 0; } |
转载于:https://www.cnblogs.com/Exception2017/p/10252115.html