关于第一个测试点:我输出的明明是9,为什么说我输出的是5???

P1957 口算练习题

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

感谢


|