RERERE!!!!!!!!!

P1055 [NOIP2008 普及组] ISBN 号码

FYH666666 @ 2023-10-19 22:24:04

#include<stdio.h>
#include<string.h>
int main(){
    int n,sum=0,cnt=0;
    char a[99];
    for(int i=1;i<=13;i++){
        scanf("%s",a[i]);
    }
    for(int i=1;i<=12;i++){
        if(a[i]!='-'){
            cnt++;
            sum=sum+a[i]*cnt;
        } 
    }
    if(sum%11<10) sum=sum%11;
    else if(sum%11==10) sum='X';
    if(a[13]==sum){
        printf("Right");
        return 0;
    }
    else{
        for(int j=1;j<=13;j++){
            printf("%c",a[j]);
        }
    }
    return 0;
} 

by zhouruoheng @ 2023-10-19 22:58:14

RE 是因为第7行的 printf 少了 & ,而且不应该用 %s 要用 %c 。

这样交上去还是错的,因为你直接用字符进行计算了,就是 a[i] ,char 型对应的数是该字符的 ASCII值,如 '0' 对应的是48,计算就会出错。


by zhouruoheng @ 2023-10-19 23:04:21

这样改

#include<stdio.h>
#include<string.h>
int main(){
    int sum=0,cnt=0;
    char a[99];
    for(int i=1;i<=13;i++){
        scanf("%c",&a[i]);//格式要正确
    }
    for(int i=1;i<=12;i++){
        if(a[i]!='-'){
            cnt++;
            sum=sum+(a[i]-'0')*cnt;//字符转为数字
        } 
    }
    if(sum%11<10) sum=sum%11+'0';//数字转为字符
    else if(sum%11==10) sum='X';
    if(a[13]==sum){
        printf("Right");
        return 0;
    }
    else{
        a[13]=sum;//不要忘了修改最后一位
        for(int j=1;j<=13;j++){
            printf("%c",a[j]);
        }
    }
    return 0;
} 

a[i] 减去 '0' 就能得到真正的数,同理,sum加上'0'就能得到对应的字符。 '0'就是0所对应的ASCII值。


by FYH666666 @ 2023-10-20 12:41:25

@zhouruoheng 谢谢


|