测试点#5#6#9报错的玄学问题

P1055 [NOIP2008 普及组] ISBN 号码

FreshLittleLemon @ 2023-08-02 16:31:26

怪了,为什么把这个程序中

if (a[9]==x-'0'||a[9]==x-'X'+10) 

这句改成

if (a[9]==x-'0'||a[9]==10)

就会出现一些错误

//原程序如下:
#include <stdio.h>
int main()
{
    int a[10],i;
    char x,y;
    scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&x);
    for (i=0;i<9;i++) {
        a[9]+=(a[i]*(i+1));
    }
    a[9]%=11;
    if (a[9]==x-'0'||a[9]==x-'X'+10) {
        printf("Right");
    } else {
        y=(a[9]==10)?'X':('0'+a[9]);
        printf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],y);
    }
    return 0;
}

就说,上面这样写是跑得过的,但是改了之后就会报错#5#6#9这几个测试点,但很怪的是:

y=(a[9]==10)?'X':('0'+a[9]);

这句话原来就是这么写的但没出问题。。。


by juruo_zxt @ 2023-08-02 16:34:02

提醒一下代码观感()


by __yun__ @ 2023-08-02 16:45:46

因为有一些数据你算出来的是10但是它原来不是10
写成if (a[9]==x-'0'||a[9]==10&&x=='X')也能过


|