您的位置  > 互联网

图书都有唯一的ISBN码(书号)校验码的计算方法

例如,对于 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);
        }
    }
}