簡單高精度加法
阿新 • • 發佈:2018-06-10
efi std enter strlen printf col CA 其中 color
【高精度】簡單高精度加
題目描述
修羅王解決了計算機的內存限制問題,終於可以使用電腦進行大型的魔法運算了,他交給邪狼的第一個任務是計算兩個非負整數A、B的和,其中A和B的位數在5000位以內。輸入
共兩行數據,第一行為一個非負整數A,第二行為一個非負整數B,A、B的位數均在5000以內。輸出
輸出一個非負數,即兩數之和。樣例輸入
1111111111
2222222222
樣例輸出
3333333333
#include <bits/stdc++.h> #define N 5000 #define ZEROCHAR -48 int maxleng(int a,int b) {return a>b?a:b; } int transnumber(char c) { return c-‘0‘; } int main() { char a[N+5],b[N+5]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); scanf("%s %s",a,b); int len1=strlen(a); int len2=strlen(b); int i; for(i=0;i<(len1+1)/2;++i) { if(i==len1-1-i)break; a[i]=a[i]+a[len1-1-i]; a[len1-1-i]=a[i]-a[len1-1-i]; a[i]=a[i]-a[len1-1-i]; } for(i=0;i<(len2+1)/2;++i) { if(i==len2-1-i) break; b[i]=b[i]+b[len2-1-i]; b[len2-1-i]=b[i]-b[len2-1-i]; b[i]=b[i]-b[len2-1-i]; }int leng=maxleng(len1,len2); int c,psum,sum[N+5],an,bn; for(i=0,c=0,psum=0;i<=leng;++i) { an=transnumber(a[i]); bn=transnumber(b[i]); if(an==ZEROCHAR) an=0; if(bn==ZEROCHAR) bn=0; psum=an+bn+c; sum[i]=psum%10; c=psum/10; } int sumleng=(sum[leng]>0?leng+1:leng); for(i=sumleng-1;i>=0;--i) { printf("%d",sum[i]); } printf("\n"); return 0; }
簡單高精度加法