CCF201312-2 ISBN号码
题目:
题目分析:
题目要求验证ISBN号码最后一位的正确性,需要把输入的ISBN号码从字符转为数字,在进行一些加法、乘法处理。
再最后的输出判定上,需要分四种情况:
1.最后一个字符为数字等于所得结果%11;
2.最后一个字符为X,所得结果为10;
3.最后一个字符为数字不等于所得结果%11;
4.最后一个字符为X,所得结果不为10.
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int end=s[12]-'0',ind=1,sum=0;
for(int i=0;i<11;i++){
if(i==1||i==5)continue; //字符为'-'跳过处理
sum+=(s[i]-'0')*ind; //计算前面的9个数字分别与1,2,3...8,9的乘积和
ind++; //每计算一次,乘数++
}
//需要注意区分最后一个字符与sum%11的各种情况
if(end==sum%11||(s[12]=='X'&&sum%11==10)) cout<<"Right"<<endl;
else { //ISBN号码不正确时
for(int i=0;i<=11;i++) cout<<s[i];//先输出前12个字符
if(sum%11==10)cout<<'X'<<endl; //分情况输出最后一个字符
else cout<<sum%11<<endl;
}
return 0;
}