注意:
ASCII的编码
字符 对应的ASCII码(10进制)
‘0’ 48
‘1’ 49
‘2’ 50
‘3’ 51
…
‘8’ 56
‘9’ 57
#include<bits/stdc++.h>//c++的万用头文件
using namespace std;
int main(){
int i,j=0,Num[10],SUM=0,mod;
char ISBN[13],isbn[13];
//gets(ISBN);//这里输入为0-670-82162-4
//第一次提交gets报warning,所以改用循环输入
for(i=0;i<13;i++)cin>>ISBN[i];
for(i=0;i<13;i++)isbn[i]=ISBN[i];
for(i=0;i<13;i++){
if(ISBN[i]!='-'){
Num[j]=ISBN[i]-48;//基于ASCII编码的字符转十进制数字
j++;
}
}
//for(i=0;i<10;i++)cout<<Num[i]<<endl;//编译检查Num中的数字是否正确
//根据题目要求写运算判断
j=1,SUM=0;
for(i=0;i<9;i++){
SUM=SUM+Num[i]*j;
j++;
}
/*mod=SUM%11;
if(mod==Num[9]){
cout<<"Right";
}else{
ISBN[12]=mod+48;//基于ASCII编码的十进制数字转字符
//cout<<ISBN[11]<<' '<<ISBN[12];//检查转化是否正确
//puts(ISBN);//这里编译时puts的输出出问题,我不知道原因
//0-670-82162-4[]
//所以改用循环输出
for(i=0;i<13;i++)cout<<ISBN[i];
}
//第二次提交时终于想明白问题我忘了mod为X
所以把判断修改为isbn与ISBN相同为Right
*/
mod=SUM%11;
if(mod==10){
isbn[12]='X';
}else{
isbn[12]=mod+48;
}
if(isbn[12]==ISBN[12]){
cout<<"Right";
}else{
for(i=0;i<13;i++)cout<<isbn[i];
}
}