首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

杭电ACM1002题为何老是Wrong Answer

2013-09-16 
杭电ACM1002题为什么老是Wrong Answer请大家给我分析下,我该如何着手,Wrong Answer从哪方面下手,贴上代码,

杭电ACM1002题为什么老是Wrong Answer
请大家给我分析下,我该如何着手,Wrong Answer从哪方面下手,贴上代码,在VC上就可以成功且输出的:
#include <stdio.h>
#include <string.h>

int Calute(char *s1,char *s2,int *s3)
{
int i,len,temp,flag_in=0,max;
char *p1,*p2;
int  *p3;
if((NULL == s1)&&(NULL==s2)&&(NULL==s3))
return 0;

if(strlen(s1) > strlen(s2))
{
max = strlen(s1);
len = max - strlen(s2);
p1 = s1;
p2 = s2;
}else
{
max = strlen(s2);
len = max - strlen(s1);
p1 = s2;
p2 = s1;
}
p3 = s3;
*(p3+max) = '\0';
for(i=max-1;i>=0;i--)
{
if(i-len < 0)
{
temp = (*(p1+i) - '0') + flag_in;
}else
{
temp = (*(p1+i) - '0') + (*(p2+i-len) - '0') + flag_in;
}
if(temp >= 10)
{
s3[max-1-i] = temp%10;;
flag_in = temp/10;
}else
{
s3[max-1-i] = temp;
flag_in = 0;
}
}
i = max-1;
if(flag_in != 0)
s3[++i] = flag_in;
return i;
}

int main()
{
char str1[10][100],str2[10][100];
int num[10][100];
int n=0,i=0,flag[10],j;

scanf("%d",&n);
getchar();
if(n > 0)
{
while(n--) 
{
scanf("%s %s",str1[i],str2[i]);
flag[i] = Calute(str1[i],str2[i],num[i]);
i++;
}
n = i;
for(i=0;i<n;i++)
{
printf("case %d:\n",i+1);
printf("%s + %s = ",str1[i],str2[i]);
for(j=flag[i];j>=0;j--)
{
printf("%d",num[i][j]);
}
printf("\n\n");
}
}
} 杭电 acm strlen vc
[解决办法]
LZ程序有以下问题:
1 数组不够大,不满足题中关于”T(1<=T<=20)“和“the length of each integer will not exceed 1000”的要求;


2 “Case”错写为“case”;
3 未删除前导0(即“001”应输出“1");
4 最后多输出一个空行。

如下修改可AC:

#include <stdio.h>
#include <string.h>

int Calute(char *s1,char *s2,int *s3)
{
int i,len,temp,flag_in=0,max;
char *p1,*p2;
int  *p3;
if((NULL == s1)&&(NULL==s2)&&(NULL==s3))
return 0;

if(strlen(s1) > strlen(s2))
{
max = strlen(s1);
len = max - strlen(s2);
p1 = s1;
p2 = s2;
}else
{
max = strlen(s2);
len = max - strlen(s1);
p1 = s2;
p2 = s1;
}
p3 = s3;
*(p3+max) = '\0';
for(i=max-1;i>=0;i--)
{
if(i-len < 0)
{
temp = (*(p1+i) - '0') + flag_in;
}else
{
temp = (*(p1+i) - '0') + (*(p2+i-len) - '0') + flag_in;
}
if(temp >= 10)
{
s3[max-1-i] = temp%10;;
flag_in = temp/10;
}else
{
s3[max-1-i] = temp;
flag_in = 0;
}
}
i = max-1;
if(flag_in != 0)
s3[++i] = flag_in;
return i;
}

int main()
{
char str1[20][1001],str2[20][1001];//char str1[10][100],str2[10][100];
int num[20][1001];//int num[10][100];
int n=0,i=0,flag[20],j;//int n=0,i=0,flag[10],j;

scanf("%d",&n);
getchar();
if(n > 0)
{
while(n--) 
{
scanf("%s %s",str1[i],str2[i]);
flag[i] = Calute(str1[i],str2[i],num[i]);
i++;
}
n = i;
for(i=0;i<n;i++)
{
printf("Case %d:\n",i+1);//printf("case %d:\n",i+1);
printf("%s + %s = ",str1[i],str2[i]);
for(j=flag[i];j>=0;j--) if (num[i][j]) break;//跳过前导0
for(;j>=0;j--)//for(j=flag[i];j>=0;j--)
{
printf("%d",num[i][j]);
}
printf("\n");if (i < n-1)printf("\n");//printf("\n\n");
}
}
}

热点排行