大數a+b(整數)
阿新 • • 發佈:2019-02-06
給出2個大整數A,B,計算A+B的結果。Input第1行:大數A第2行:大數B(A,B的長度 <= 10000 需注意:A B有可能為負數)Output輸出A + BSample Input68932147586
468711654886Sample Output537643802472修修補補中終於寫成了。。。寫的還有點麻煩╮(╯▽╰)╭
468711654886Sample Output537643802472修修補補中終於寫成了。。。寫的還有點麻煩╮(╯▽╰)╭
#include<bits/stdc++.h> using namespace std; char a[10006],b[10006]; int c[10006],d[10006],e[10006]; int main() { scanf("%s %s",a,b); int len1=strlen(a),len2=strlen(b); int x,y; if(a[0]!='-') { for(int i=len1-1,j=0;i>=0;i--,j++) { c[j]=a[i]-'0';x=j; } } else { for(int i=len1-1,j=0;i>=1;i--,j++) { c[j]=-(a[i]-'0');x=j;} } if(b[0]!='-') { for(int i=len2-1,j=0;i>=0;i--,j++) { d[j]=b[i]-'0';y=j; } } else { for(int i=len2-1,j=0;i>=1;i--,j++) { d[j]=-(b[i]-'0');y=j; } } int len=max(x,y); for(int i=0;i<=len;i++) { e[i]+=c[i]+d[i]; } int fla=1; for(int i=len;i>=0;i--) { if(e[i]!=0) { if(e[i]<0) { fla=-1; e[i]=-e[i]; } break; } } for(int i=0;i<len;i++) e[i]*=fla; for(int i=0;i<len;i++) { if(e[i]>=10) { e[i+1]++; e[i]-=10; } if(e[i]<0&&e[i]>=-10) { e[i+1]--; e[i]+=10; } if(e[i]<-10) { e[i+1]-=2; e[i]+=20; } } if(fla==-1) printf("-"); for(int i=len,j=len;i>=0;i--) { if(e[j]==0) { j--; if(j==-1) printf("0"); continue; } printf("%d",e[i]); } printf("\n"); return 0; }