基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
给出4个大整数A,B,C,D,计算A+B+C+D的结果。
Input
A, B, C and D(-2^61 <= A,B,C,D<=2^61)
Output
输出A + B + C + D
Input示例
1
1 2 3 4
Output示例
10
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
void jiafa(char *aa,char *bb)
{
int a[1010],b[1010],c[1010];
char cc[1010];
memset(cc,0,sizeof(cc));
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int la,lb;
la=strlen(aa);
lb=strlen(bb);
for(int i=la-1,j=0; i>0; i--)
a[j++]=aa[i]-'0';
if(aa[0]=='-')
{
for(int i=0; i<la-1; i++)
a[i]=-a[i];
}
else
a[la-1]=aa[0]-'0';
for(int i=lb-1,j=0; i>0; i--)
b[j++]=bb[i]-'0';
if(bb[0]=='-')
{
for(int i=0; i<lb-1; i++)
b[i]=-b[i];
}
else
b[lb-1]=bb[0]-'0';
int lc=max(la,lb);
int p,r=0;
for(int i=0; i<lc; i++)
{
p=a[i]+b[i]+r;
r=p/10;
c[i]=p%10;
}
if(r) c[lc++]=r;
while(lc>1&&c[lc-1]==0)lc--;
int flag=0;
if(c[lc-1]>=0)
{
flag=1;
for(int i=0; i<lc; i++)
{
while(c[i]<0)
{
c[i+1]--;
c[i]+=10;
}
}
}
else
{
flag=-1;
for(int i=0; i<lc; i++)
{
while(c[i]>0)
{
c[i+1]++;
c[i]-=10;
}
}
}
while(lc>1&&c[lc-1]==0) lc--;
int lcc=1;
for(int i=lc-1; i>=0;i--)
cc[lcc++]=abs(c[i])+'0';
if(flag<0)
cc[0]='-';
else
cc[0]='0';
strcpy(aa,cc);
}
int main()
{
int ca;
scanf("%d",&ca);
while(ca--)
{
char a[25],b[25],c[25],d[25];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
scanf("%s%s%s%s",a,b,c,d);
jiafa(a,b);
jiafa(a,c);
jiafa(a,d);
if(a[0]=='-')
printf("%c",a[0]);
printf("%s\n",a+1);
}
return 0;
}