-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1055_ISBN号码.c
72 lines (61 loc) · 2.26 KB
/
1055_ISBN号码.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
题目描述
每一本正式出版的图书都有一个ISBN号码与之对应,
ISBN码包括9位数字、1位识别码和33位分隔符,
其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),
最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,
例如0代表英语;第一个分隔符-之后的三位数字代表出版社,
例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;
最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod11,
所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码0-670-82162-4中的识别码4是这样得到的:
对067082162这9个数字,从左至右,分别乘以1,2,...,9再求和,
即0×1+6×2+……+2×9=158,然后取158mod11的结果44作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,
则仅输出Right;如果错误,则输出你认为是正确的ISBN号码。
输入格式
一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式
一行,假如输入的ISBN号码的识别码正确,那么输出Right,
否则,按照规定的格式,输出正确的ISBN号码(包括分隔符-)。
*/
#include <stdio.h>
int main(void)
{
char str[14];
int i, k=1, target, con=0;
char c;
str[13] = '\0';
for (i=0; i<13; i++)
{
c = getchar();
if (c != '-')
if (k == 10)
{
if (c != 'X')
target = (int)c - 48;
else
target = 10;
}
else
{
con += ((int)c-48) * k++;
}
str[i] = c;
}
if (con % 11 == target)
printf("Right\n");
else
{
target = con % 11;
if (target == 10)
str[12] = 'X';
else
str[12] = (char)(target+48);
printf("%s\n", str);
}
return 0;
}