杭电acm第三题,请问我的代码哪有问题,怎么一直w a,求助啊
答案:2 悬赏:50 手机版
解决时间 2021-04-05 09:33
- 提问者网友:火车头
- 2021-04-04 09:38
杭电acm第三题,请问我的代码哪有问题,怎么一直w a,求助啊
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-04-04 10:08
【解题思路】
典型的大数问题,注意好进位就没问题了~我就是忽略了最高位的进位,让我改了一下午才发现这个问题,终于AC了~因此做这样的题需要的是细心和耐心~
【附上AC源代码~】
#include
#include
#define N 1005
char A[N],B[N],sum[N];
int main()
{
int T,i,j,k,x,sign;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i {
if(i)
printf("/n");
scanf("%s%s",&A,&B);
j=strlen(A)-1,k=strlen(B)-1;
for(x=0,sign=0;(j+1)&&(k+1);j--,k--,x++)
{
if((A[j]-'0')+(B[k]-'0')+sign<10)
{
sum[x]=(A[j]-'0')+(B[k]-'0')+sign;
sign=0;
}
else
{
sum[x]=(A[j]-'0')+(B[k]-'0')+sign-10;
sign=1;
}
}
if(j+1)
{
for(;j>=0;j--,x++)
{
if(A[j]-'0'+sign<10)
{
sum[x]=(A[j]-'0')+sign;
sign=0;
}
else
{
sum[x]=0;
sign=1;
}
}
}
else if(k+1)
{
for(;k>=0;k--,x++)
{
if(B[k]-'0'+sign<10)
{
sum[x]=(B[k]-'0')+sign;
sign=0;
}
else
{
sum[x]=0;
sign=1;
}
}
}
if(sign)
sum[x]=1;
else
x--;
printf("Case %d:/n",i+1);
printf("%s + %s = ",A,B);
while(x>-1)
printf("%d",sum[x--]);
printf("/n");
}
}
return 0;
}
典型的大数问题,注意好进位就没问题了~我就是忽略了最高位的进位,让我改了一下午才发现这个问题,终于AC了~因此做这样的题需要的是细心和耐心~
【附上AC源代码~】
#include
#include
#define N 1005
char A[N],B[N],sum[N];
int main()
{
int T,i,j,k,x,sign;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i
if(i)
printf("/n");
scanf("%s%s",&A,&B);
j=strlen(A)-1,k=strlen(B)-1;
for(x=0,sign=0;(j+1)&&(k+1);j--,k--,x++)
{
if((A[j]-'0')+(B[k]-'0')+sign<10)
{
sum[x]=(A[j]-'0')+(B[k]-'0')+sign;
sign=0;
}
else
{
sum[x]=(A[j]-'0')+(B[k]-'0')+sign-10;
sign=1;
}
}
if(j+1)
{
for(;j>=0;j--,x++)
{
if(A[j]-'0'+sign<10)
{
sum[x]=(A[j]-'0')+sign;
sign=0;
}
else
{
sum[x]=0;
sign=1;
}
}
}
else if(k+1)
{
for(;k>=0;k--,x++)
{
if(B[k]-'0'+sign<10)
{
sum[x]=(B[k]-'0')+sign;
sign=0;
}
else
{
sum[x]=0;
sign=1;
}
}
}
if(sign)
sum[x]=1;
else
x--;
printf("Case %d:/n",i+1);
printf("%s + %s = ",A,B);
while(x>-1)
printf("%d",sum[x--]);
printf("/n");
}
}
return 0;
}
全部回答
- 1楼网友:孤老序
- 2021-04-04 11:10
问题1 : result数组的初始化写法有问题 for(i=0;i result数组定义后元素均为随机值(有可能其中某几个就是'\0'了),你的初始化循环的停止条件是到达数组边界或当前字符已经为'\0',这样的话循环的意思就变成只要碰到'\0'就初始化结束并未起到初始化一段至少比输入两个加数长度最大值+2长度的空间的目的(为什么是+2呢因为结果串可能因进位比输入串最大值多1,字符串的最后还要有一个'\0'作为结束标志才能正常输出)
所以要把 result[i] != '\0'条件去掉,(可将i 问题2: result[a-1]= pdata[a-1] + paddend[b-1]-'0';
和
result[a-1]=pdata[a-1];
应该为 result[a-1] += pdata[a-1] + paddend[b-1]-'0'; result[a-1] +=pdata[a-1];
因为可能前面有进位使 result[a-1]的值已经不是 '\0'
所以要把 result[i] != '\0'条件去掉,(可将i
和
result[a-1]=pdata[a-1];
应该为 result[a-1] += pdata[a-1] + paddend[b-1]-'0'; result[a-1] +=pdata[a-1];
因为可能前面有进位使 result[a-1]的值已经不是 '\0'
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯