厦大C语言上机 2020年期末上机考试 校验ISBN

校验ISBN

 

描述

国际标准书号ISBN共17位,由13位数字和4位连字符(“-”)组成。最后1位数字表示校验位,校验规则为:对从左至右前12位数字,分别计算奇位数之和s1与偶位数之和s2;将s2乘以3,与s1相加,结果的个位数记为sum,即sum=(s23 + s1) mod 10;则校验位c为:c=10-sum。

例如,C语言课本的ISBN号为:978-7-302-48144-7。

其奇位数之和s1=9+8+3+2+8+4=34,偶位数之和s2=7+7+0+4+1+4=23

sum=(233+34) mod 10=3,校验位c=10-sum=7

编写程序,读入一个标准格式的ISBN号,判断其校验位是否正确,正确输出1,错误输出0。

 

输入

一个标准格式的17位ISBN号

 

输出

1或者0,表示校验位是否正确

 

输入样例 1

978-7-302-48144-7

 

输出样例 1

1

 

输入样例 2

978-92-95055-02-7

 

输出样例 2

0

 

#include <stdio.h>

int main()
{
    char isbn[20] = { 0 };
    int digit_count = 0, odd_sum = 0, even_sum = 0;

    scanf("%s", isbn);
    for (int i = 0; digit_count < 12; ++i)
    {
        if (isbn[i] != '-')
        {
            digit_count++;
            if (digit_count % 2 == 1)
                odd_sum += isbn[i] - '0';
            else
                even_sum += isbn[i] - '0';
        }
    }
    int check = 10 - ((odd_sum + 3 * even_sum) % 10);
    if (check == isbn[16] - '0')
        printf("1");
    else
        printf("0");

    return 0;
}

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值