例如,对于 ISBN:7-302-56474-4,有 sum=7×10+3×9+0×8+2×7+5×6+6×5+4×4+7×3+ 4×2=216,r=216=7,d=11-7=4,所以校验码为4。
请判断输入的书号中的校验码是否正确。 如果正确则输出“OK”,否则更新校验码后输出正确的书号。
输入格式:
首先输入测试组数T,然后输入T组测试数据。 每组测试输入一个表示书号的字符串,格式为“a-bcd-efghi-j”。
输出格式:
对于每组测试,输出一行。 如果书号校验码正确,则输出“OK”。 否则,以“a-bcd-efghi-j”的格式更新校验码后输出正确的书号。 不需要输出引号。
输入示例:
2
7-302-56474-4
6-302-57644-3
输出样本:
OK
6-302-57644-X
#include
int main()
{
int t, i, j, k, sum, count;
char a[50], m;
scanf("%d",&t);
getchar(); //记得把scanf的回车吸收掉
for(i = 1; i <= t; i++)
{
gets(a);
sum = 0; j = 0;
k = 10; count = 0;
while(count < 9)
{
if(a[j] >= '0' && a[j] <= '9')
{
sum += k*(a[j]-'0'); //因为结果askii码 要减去'0'
k--;
count++;
}
j++;
}
int r = sum;
if(r == 0)
{
m = '0';
}
else
{
int d = 11-r;
if(d == 10)
{
m = 'X';
}
else
{
m = d+'0';
}
}
if(a[12] == m)
{
printf("OK\n");
}
else
{
a[12] = m;
printf("%s\n",a);
}
}
}