poj1503(高精度模擬加法)
阿新 • • 發佈:2021-02-20
題意:將兩個大數相加。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1003;
char s1[maxx][maxx];
char s2[maxx];
int a[maxx];
int b[maxx];
int c[maxx];
int main(){
memset(a,0,sizeof(a));
memset(c,0,sizeof(c)) ;
memset(b,0,sizeof(b));
int j=0;
while(cin>>s1[j]){
if(s1[j][0]=='0'&&strlen(s1[j])==1)break;
j++;
}
int k=0;
int n=strlen(s1[k]);
for(int i=0;i<n;i++){
a[n-i]=s1[k][i]-'0';
}
k++;
int m=strlen(s1[k]);
for(int i=0;i<m;i++){
b[m-i]=s1[k][i]-'0';
}
int len=max(n,m)+1;
for (int i=0;i<len;i++){
int v=a[i]+b[i];
if(c[i]+v>=10){
c[i+1]=(v+c[i])/10;
c[i]=(c[i]+v)%10;
}else{
c[i]+=v;
}
}
while(c[len]==0&&len>0)len--;
memset(b,0,sizeof(b));
for(int i=1;i<=len;i++){
b[i]=c[i];
}
memset(c,0,sizeof(c));
k++;
while(k<j){
memset(a,0,sizeof (a));
n=strlen(s1[k]);
for(int i=0;i<n;i++){
a[n-i]=s1[k][i]-'0';
}
len=max(len,n)+1;
for(int i=0;i<len;i++){
int v=a[i]+b[i];
if(c[i]+v>=10){
c[i+1]=(v+c[i])/10;
c[i]=(c[i]+v)%10;
}else{
c[i]+=v;
}
}
while(c[len]==0&&len>0)len--;
memset(b,0,sizeof(b));
for(int i=1;i<=len;i++){
b[i]=c[i];
}
memset(c,0,sizeof(c));
k++;
}
for(int i=len;i>0;i--){
cout<<b[i];
}
return 0;
}