ksf130020 @ 2022-09-23 17:21:11
本地测试:(下载第一个测试点的数据)
输入:
1
a 99 999
输出:
99+999=1089
然而
Wrong Answer.worng answer On line 1 column 6,read 5,except 9.
明明样例全对,提交后全部WA,QWQ
#include<stdio.h>
#include<string.h>
int len(int n)
{
int x=1;
if(n<0)
{
n=-n;
while(n!=0)
{
n/=10;
x++;
}
}
if(n>0)
{
x--;
while(n!=0)
{
n/=10;
x++;
}
}
return x;
}
int main()
{
int i,j,k;
int e=0,f=0,l,ln;
int p;
char n[51][18];
scanf("%d",&i);
for(j=0;j<=i;j++)
{
gets(n[j]);
}
for(j=1;j<=i;j++)
{
l=strlen(n[j]);
k=0;
e=0,f=0;
if(n[j][k]=='a') {p=1;k+=2;}
if(n[j][k]=='b') {p=2;k+=2;}
if(n[j][k]=='c') {p=3;k+=2;}
while(n[j][k]!=' '&&n[j][k]!='\0')
{
e=e*10+(n[j][k]-48);
k++;
}
k++;
while(k<l)
{
f=f*10+(n[j][k]-48);
k++;
}
switch(p)
{
case 1:{ln=len(e)+len(f)+len(e+f)+2;printf("%d+%d=%d\n%d\n",e,f,e+f,ln);break;}
case 2:{ln=len(e)+len(f)+len(e-f)+2;printf("%d-%d=%d\n%d\n",e,f,e-f,ln);break;}
case 3:{ln=len(e)+len(f)+len(e*f)+2;printf("%d*%d=%d\n%d\n",e,f,e*f,ln);}
}
}
return 0;
}
by 2019zll @ 2022-09-23 19:13:43
可能是 UB(Undefined Behavior)吧,对于一些未定义的行为,不同的编译器可能有不同的解读方法。
可以去 洛谷 IDE 运行一下这一份代码,看看结果如何。
by ksf130020 @ 2022-09-23 23:11:45
@2019zll
发现问题了,在处理字符串的时候出了bug
感谢