题解 | #[NOIP2008]ISBN号码#
[NOIP2008]ISBN号码
http://www.nowcoder.com/practice/95712f695f27434b9703394c98b78ee5
-
#include<stdio.h>
-
int abc(int a, int b, int c)//返回前9个数分别乘1到9的和
-
{
-
int ret = 0;
-
int i = 0;
-
int sum1 = a;
-
int sum2 = 0;
-
int sum3 = 0;
-
i = 4;
-
while (b)
-
{
-
ret = (b % 10) * (i--);
-
sum2 += ret;
-
b = b / 10;
-
}
-
i = 9;
-
while (c)
-
{
-
ret = (c % 10) * (i--);
-
sum3 += ret;
-
c = c / 10;
-
}
-
return sum1 + sum2 + sum3;
-
}
-
-
int main()
-
{
-
int a = 0;
-
int b = 0;
-
int c = 0;
-
char d = 0;
-
scanf("%d-%3d-%5d-%c", &a, &b, &c, &d);//对应输入
-
int ret = abc(a, b, c);
-
if (d != 'X') //如果输入的识别码不为X,则数字(0)对应的字符('0')ascii相差48
-
{
-
if (ret % 11 == d - 48)
-
{
-
printf("Right");
-
}
-
else
-
{
-
if (ret % 11 == 10)
-
printf("%d-%3d-%5d-X", a, b, c);
-
else
-
printf("%d-%3d-%5d-%d", a, b, c, ret % 11);
-
}
-
}
-
else//如果输入的识别码为X,X的ascii为88,减去78得到数字10
-
{
-
if (ret % 11 == d - 78)
-
{
-
printf("Right");
-
}
-
else
-
{
-
printf("%d-%3d-%5d-%d", a, b, c, ret % 11);
-
}
-
}
-
return 0;
-
}