杭电acm1002到底是怎么回事,在vc6.0上运行的已经符合他的要求,可是就是通不过。。。
发布网友
发布时间:2023-06-23 12:16
我来回答
共2个回答
热心网友
时间:2023-10-11 19:04
首先做ACM的题不要使用VC,VC有很多地方与ACM承认的G++和GCC有很大差别,就算是杭电和POJ的C++编译器也和VC有一定差异。如果玩ACM使用VC,那么可以肯定的是在以后的比赛和练习中会吃很大亏。因此就不要使用VC了。你的代码实际上存在不少问题,你试试 99 和 2这组数据吧,你的结果有问题,就是说在加法进位时处理有问题。你再仔细检查一下还有就是输出没有必要等到最后一起输出,ACM评测时输出是单独存在于一个文件中,因此可以一组数据输出一次。最后要说的是样例数据不是那种特殊的关键数据,因此样例数据通过不代表你的代码一定能AC,ACM一道题的评测可能会有上万个数据。你仔细检查一下细节问题,尤其是在进位方面的处理
热心网友
时间:2023-10-11 19:04
只要输入一对就打印一个结果就行了,结果好像有问题额
1
112233445566778899 998877665544332211
Case 1:
112233445566778899 + 998877665544332211 = 111111111111111110
Press any key to continue
没进位!!!
下面是通过的代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,j;
scanf("%d",&n);
if(n<1||n>20)
return 0;
for(j=0;j<n;j++)
{
int a[1200]={0},b[1200]={0},c[1200]={0},i,ka,kb,k;
char a1[1200],b1[1200];
scanf("%s",a1);
ka=strlen(a1);
for(i=0;i<ka;i++)
a[i]=a1[ka-i-1]-'0';
scanf("%s",b1);
kb=strlen(b1);
for(i=0;i<kb;i++)
b[i]=b1[kb-i-1]-'0';
if(ka>kb)
k=ka;
else
k=kb;
for(i=0;i<k;i++)
c[i]=a[i]+b[i];
for(i=0;i<k;i++)
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
printf("Case %d:\n",j+1);
printf("%s + %s = ",a1,b1);
if(c[k]==0)
k--;
for(i=k;i>=0;i--)
printf("%d",c[i]);
if(j==n-1)
printf("\n");
else
printf("\n\n");
}
return 0;
}