洛谷P1055挂50分

不懂就问,我洛谷P1055为什么挂了呢?(50分)

#include<bits/stdc++.h>
using namespace std;
char ISBN_char[14];
int ISBN_data[11],num=1;
int main(){
    for(int i=1;i<=13;i++)
        cin>>ISBN_char[i];
    for(int i=1;i<=13;i++){
        if(ISBN_char[i]!='-'){
        ISBN_data[num]=ISBN_char[i]-'0';
        num++;
        }
    }
    int sum=0;
    for(int i=1;i<=9;i++)
    sum+=ISBN_data[i]*i;
    sum%=11;
    if(sum==ISBN_data[10]){
        cout<<"Right";
    }
    else{
        for(int i=1;i<=12;i++)
        cout<<ISBN_char[i];
        cout<<sum;
    }
}

增加处理下识别码为'X'的情况即可。

修改如下:


#include<bits/stdc++.h>
using namespace std;
char ISBN_char[14];
int ISBN_data[11],num=1;
int main(){
    for(int i=1;i<=13;i++)
        cin>>ISBN_char[i];
    for(int i=1;i<=13;i++){
        // 将ISBN中的数字字符转为对应的数字 
        if(ISBN_char[i]>='0'&&ISBN_char[i]<='9'){
            ISBN_data[num]=ISBN_char[i]-'0';
            num++;
        }else if(ISBN_char[i]=='X'){  // 将识别码为'X'时,转为10 
            ISBN_data[num]=10;
            num++;    
        }
        
    }
    int sum=0;
    for(int i=1;i<=9;i++)
    sum+=ISBN_data[i]*i;
    sum%=11;
    if(sum==ISBN_data[10]){
        cout<<"Right";
    }
    else{
        for(int i=1;i<=12;i++)
        cout<<ISBN_char[i];
        if(sum<10){  // 如果小于10,则输出对应的识别码数字 
            cout<<sum;
        } else{ // 如果是10,则输出对应的字符'X' 
            cout<<'X';
        }
    }
}
 

img