杭电ACM1002题,通不过,求指导

2024-11-27 11:19:38
推荐回答(2个)
回答1:

这道题的数字范围很大,所以你必须考虑大数运算,以下是我的ac代码,希望你能从代码中掌握大数运算的知识,加油
#include
#include
char a[21][100001],b[21][100001],f[21][1000001];int c[1000000];
int main()
{
int i,j,d,l1,l2,m;
scanf("%d",&i);
getchar();
for(j=1;j<=i;j++)
{
scanf("%s%s",a[j],b[j]);
l1=strlen(a[j])-1;
l2=strlen(b[j])-1;
for(m=1;m<=100000;m++)
{
c[m]=0;
}
m=0;
while(l1>=0&&l2>=0)
{
c[++m]+=a[j][l1]-'0'+b[j][l2]-'0';
if(c[m]>=10)
{
c[m+1]+=c[m]/10;
c[m]=c[m]%10;
}
l1--;l2--;
}
if(l1+1==0&&l2+1==0&&c[m+1]!=0)++m;
while(l1>=0)
{
c[++m]+=(int)a[j][l1]-48;l1--;
}
while(l2>=0)
{
c[++m]+=(int)b[j][l2]-48;l2--;
}
for(d=m;d>=1;d--)
{
f[j][m-d]=c[d]+'0';
}
}
for(j=1;j<=i;j++)
{
printf("Case %d:\n",j);
printf("%s + %s = ",a[j],b[j]);
printf("%s\n",f[j]);
if(j!=i)printf("\n");
}
}

回答2:

高精度,即便是__int64也只能存不到20位。如果几百几千位你怎么算?用java写或者高精度模板写。