jessie_jt 2022-06-11 14:37 采纳率: 75%
浏览 48
已结题

isbn号码如何计算以及如何判断是否正确

题目要求:
每一本正式出版的图书都有一个 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 号码。

【样例输入】
0-670-82162-4
【样例输出】
Right

  • 写回答

1条回答 默认 最新

  • ...404 Not Found 2022-06-11 15:00
    关注
    
    #include<stdio.h>
    int main()
    {
        char ISBN[13]={0};
        int sum=0;
        scanf("%s",&ISBN);
        int i=1;
        int j=0;
        while(i<=9)
        {
            int ret=ISBN[j]-'0';
            if(ret>=0&&ret<=9)
            {
                sum+=ret*i;
                i++;
            }
            j++;
        }
        int mod=sum%11;
        if(ISBN[12]=='X')
            sum=10;
        else
            sum=ISBN[12]-'0';
        if(mod==sum)
            printf("Right");
        else
        {
            if(mod>=10)
                ISBN[12]='X';
            else
                ISBN[12]=mod+'0';
            printf("%s",ISBN);
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月19日
  • 已采纳回答 6月11日
  • 创建了问题 6月11日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示