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

#include<stdio.h>intmain(){inta;__int64b;__int64c;inti;while(scanf("%d",&a)==1){for(i... #include<stdio.h>
int main()
{int a;
__int64 b;
__int64 c;
int i;
while (scanf("%d",&a)==1)
{ for (i=1;i<=a;i++)
{scanf("%I64d%I64d",&b,&c);
printf("Case %d\n:",i);
printf("%I64d + %I64d = %I64d\n " ,b,c,b+c);
printf("\n");
}
}
return 0;
}
展开
 我来答
702htme430
2011-08-25 · TA获得超过695个赞
知道答主
回答量:528
采纳率:0%
帮助的人:319万
展开全部
这道题的数字范围很大,所以你必须考虑大数运算,以下是我的ac代码,希望你能从代码中掌握大数运算的知识,加油
#include<string.h>
#include<stdio.h>
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");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
like680623
2011-08-25
知道答主
回答量:29
采纳率:0%
帮助的人:8.2万
展开全部
高精度,即便是__int64也只能存不到20位。如果几百几千位你怎么算?用java写或者高精度模板写。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式