iostramusing 2022-01-23 16:55 采纳率: 96.3%
浏览 27
已结题

ISBN号码c++用字符串解不能用函数

ISBN号码
c++

【问题描述】

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语; 第一个分隔符-之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果 对11取余,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9再求和,即0乘1加6乘2加……加2乘9=158,然后取158 %11的结果4作为识别码。

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

【样例输入1】

0-670-82162-4

【样例输出1】

Right

【样例输入2】

0-670-82162-0

【样例输出2】

0-670-82162-4

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-01-23 17:29
    关注
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string isbn;
        std::cin >> isbn;
        int sum = 0;
        bool result = true;
        for (std::size_t i = 0, j = 1; i < isbn.size(); i++)
        {
            if (isbn[i] == '-')
                continue;
            if (i < 12)
            {
                sum += (isbn[i] - '0') * j++;
            }
            else
            {
                int c = sum % 11;
                if (c < 10)
                    c += '0';
                else
                    c = 'X';
                if (c != isbn[i])
                {
                    result = false;
                    isbn[i] = c;
                }
            }
        }
        if (result)
            std::cout << "Right" << std::endl;
        else
            std::cout << isbn << std::endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大