题解:洛谷 P1055 ISBN号码

1.题目描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如x-xxx-xxxxx-x。

识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:0×1+6×2+……+2×9=158,然后取158 mod 11的结果 4 作为识别码。

2.题目要求
编写程序判断输入的ISBN号码中识别码是否正确,如果正确则仅输出Right;如果错误,则输出你认为是正确的ISBN号码。

例如:
输入: 0-670-82162-4
输出 :Right

输入:0-670-82162-0
输出:0-670-82162-4

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string ISBN;
    int sum = 0,j=1;  //由于遇到‘-’时需要跳过此次循环,但是下标i会继续累积,所以使用另一个下标j,只有当时数字时才累加
    cin >> ISBN;
    for (int i = 0; i < 11; i++) //9个数字+2个‘-’
    {
        if (ISBN[i] =='-') //如果是‘-’就跳过此次循环
            continue;
        else
        {
            sum +=(ISBN[i]-'0')*j; //因为ISBN是string类型,所以将字符串转换为数字
            j++;
        }
    }
    int reg=sum%11;
    char last;
    if (reg== 10)  
        last= 'X';
    else last= reg+ '0'; //数符转换
    if (last== ISBN[12])
        cout << "Right" << endl;
    else
    {
        ISBN[12] = last;
        cout <<ISBN;
    }
}
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页