不懂就问,我洛谷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';
}
}
}