为什么过不了,求大佬指点

P1055 [NOIP2008 普及组] ISBN 号码

Arien @ 2023-09-07 16:24:34

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int i=0,j=0,sum=0,t=0;
    char a[14]={0};
    for(i=0;i<13;i++){
    scanf("%c",&a[i]);
        if(a[i]=='-'){
            continue;
        }else{
            j++; 
            sum +=(int)a[i]*j;
        }
    }
    getchar();
    t=sum%11;
    if(t==10){
        a[13]='X';
    }
    if((int)a[13]==t){
        printf("Right");
    }else{
        a[13]=t;
        printf("%s",a);
    }

    return 0;
}

by nnbnwd @ 2023-09-09 13:00:22

可能是判断出了问题

0-670-82162-X

这是测试点2的输入与输出,据题意输入与输出不能相同


by nnbnwd @ 2023-09-09 13:11:55

有没可能这个int把他转换为ASCII编码了

if((int)a[13]==t){

    printf("Right");
}else{
    a[13]=t;
    printf("%s",a);
}

by nnbnwd @ 2023-09-09 13:14:29

导致他算错输出别的数,或者不输出right


by nnbnwd @ 2023-09-09 13:20:54

这么做的话是s[i]应减去'0',可以使他恢复整型1~9几个数字因为(int('1'))=49,减去‘0’等于49-48(零的ASCII值),10的话就特判


by nnbnwd @ 2023-09-09 13:23:59

循环那用这段

if(s[i]!='-'){
    j++;
    sum+=j*(s[i]-'0');
}

by nnbnwd @ 2023-09-09 13:26:13

后面判断用

if(h==10){
   a[13]='X'; 
} 
else{
   a[13]=h+'0';
}

by nnbnwd @ 2023-09-09 13:33:12

这里弄反了

if((int)a[13]==t){
    printf("Right");

应为

if(t==a[13]){
    printf("Right");

by nnbnwd @ 2023-09-09 14:08:36

我帮你改了亿下,c语言全错 c++全对

尴尬的局面,可能因为我学的c++吧


by nnbnwd @ 2023-09-09 14:19:31


    int main(){
        char a[14],ch;
        cin>>a;
        int sum=0,j=0;
        for(int i=0;i<11;i++){
            if(a[i]!='-'){
                j++;
                sum+=j*(a[i]-'0');
            }
        }
        sum%=11;
        if(sum==10){
                ch='X';
        }else{
                ch=sum+'0';
        } 
        if(ch==a[12]){
            cout<<"Right"<<endl; 
        }else{
            a[12]=ch;
            cout<<a;
        }
        return 0;
    }

by nnbnwd @ 2023-09-09 14:30:36

真服了


|