关于字符的连续输入与后面相关数字运算的转化是关键
然后就是根据不同的情况进行分支判断,输出不同的结果。
#include <stdio.h>
int ISBN[10]; //存储ISBN中10位数字
int main()
{
int ins = 0;//记录检验位;
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&ISBN[0],&ISBN[1],&ISBN[2],
&ISBN[3],&ISBN[4],&ISBN[5],&ISBN[6],&ISBN[7],&ISBN[8],&ISBN[9]);
//一口气输入完13位的ISBN号并且存储要用到的10位数字;
if(ISBN[9] == 'X')
{
ISBN[9] = 10;
for(int i=0;i<=8;i++)
{
ISBN[i] -= '0';//字符与实际数字的变换;
}
}
else
{
for(int i=0;i<=9;i++)
{
ISBN[i] -= '0';//字符与实际数字的变换;
}
}
ins = (ISBN[0]*1+ISBN[1]*2+ISBN[2]*3+ISBN[3]*4+ISBN[4]*5+ISBN[5]*6
+ISBN[6]*7+ISBN[7]*8+ISBN[8]*9)%11;
if (ins < 0)
ins = -ins;
if(ins == ISBN[9])
{
printf("Right");
}
else
{
if(ins == 10)
printf("%d-%d%d%d-%d%d%d%d%d-%c",
ISBN[0],ISBN[1],ISBN[2],ISBN[3],ISBN[4],ISBN[5],ISBN[6],ISBN[7],ISBN[8],'X');
else
printf("%d-%d%d%d-%d%d%d%d%d-%d",
ISBN[0],ISBN[1],ISBN[2],ISBN[3],ISBN[4],ISBN[5],ISBN[6],ISBN[7],ISBN[8],ins);
}
return 0;
}