【CCF】ISBN号码
2015-09-18 17:42
211 查看
问题描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。
输入格式
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式
输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
样例输入
0-670-82162-4
样例输出
Right
样例输入
0-670-82162-0
样例输出
0-670-82162-4
代码如下:
#include <iostream> using std::cout; using std::cin; using std::endl; int main(){ char s[13]; cin>>s; long c = 0; for(int i=0,j=1;i<11;i++){ if(i!=1&&i!=5){ c += (s[i]-'0')*j; j++; } } if((c % 11 == s[12]-'0')||(c%11==10&&s[12]=='X')){ cout<<"Right"<<endl; }else{ int a = c%11; if(a==10) s[12]='X'; else s[12]=a+'0'; cout<<s<<endl; } return 0; }
相关文章推荐
- UI:沙盒
- ie6 zoom css hack
- js数组之迭代器方法
- NSDate分类,把系统返回的时间与现在进行比较---秀清
- 计算机名和netbios的区别
- PDF如何更改封面
- Helloworld 之 【QT 5.5.0 MSVC 2012 + OpenCV 2.4.9 】
- 小P 的牧场(pasture)题解
- 使用 xib 和 storyboard 的缺点
- /proc/pid/status解释
- 前端看到一些不错的写法,网站,资源网站,字体等
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
- JQuery 锚点连接屏幕滚动
- C#获取窗口,模拟按键操作
- 搭建私有pip源
- 从数据库层面理解:随机 I/O & 顺序 I/O
- 571A Lengthening Sticks
- myBatis-小提示
- 1.1 从C到C++,C语言与C++的关系
- 云计算的设计模式(三)——补偿交易模式