大數a+b
阿新 • • 發佈:2019-01-11
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<map> using namespace std; char a[100010],b[100010]; int aa[100010],bb[100010],c[100010]; void cpp(char *a,char *b) { int len1=strlen(a); int len2=strlen(b); int llen1=len1,llen2=len2; memset(aa,0,sizeof(aa)); memset(bb,0,sizeof(bb)); memset(c,0,sizeof(c)); if(a[0]=='-') { for(int i=0; i<len1-1; i++) aa[i]=-int(a[len1-1-i]-'0'); llen1=len1-1; } else { for(int i=0; i<len1; i++) aa[i]=int(a[len1-1-i]-'0'); } if(b[0]=='-') { for(int i=0; i<len2-1; i++) bb[i]=-int(b[len2-1-i]-'0'); llen2=len2-1; } else { for(int i=0; i<len2; i++) bb[i]=int(b[len2-1-i]-'0'); } for(int i=0; i<llen1&&i<llen2; i++) c[i]=aa[i]+bb[i]; if(llen1>llen2) for(int i=llen2; i<llen1; i++) c[i]=aa[i]; if(llen1<llen2) for(int i=llen1; i<llen2; i++) c[i]=bb[i]; for(int i=0; i<max(llen1,llen2); i++) { if(c[i]>=10) { c[i+1]++; c[i]-=10; } if(c[i]<0&&c[i]>=-10) { c[i+1]--; c[i]+=10; } if(c[i]<-10) { c[i+1]-=2; c[i]+=20; } } int flag=0,fflag=0; for(int i=max(llen1,llen2); i>=0; i--) { if(c[i]!=0) { flag=i; break; } } if(c[flag]<0) { fflag=1; for(int i=0; i<flag; i++) { c[i]-=10; c[i+1]++; } } if(fflag) printf("-"); for(int i=flag; i>=0; i--) { if(c[i]!=0) { flag=i; break; } } for(int i=flag;i>=0;i--) printf("%d",abs(c[i])); printf("\n"); } int main() { while(~scanf("%s%s",a,b)) { cpp(a,b); } return 0; }