校验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;
}