試題編号: 201312-2
試題名稱: ISBN号碼
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:
問題描述
每一本正式出版的圖書都有一個ISBN号碼與之對應,ISBN碼包括9位數字、1位識别碼和3位分隔符,其規定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(鍵盤上的減号),最後一位是識别碼,例如0-670-82162-4就是一個标準的ISBN碼。ISBN碼的首位數字表示書籍的出版語言,例如0代表英語;第一個分隔符“-”之後的三位數字代表出版社,例如670代表維京出版社;第二個分隔之後的五位數字代表該書在出版社的編号;
最後一位為識别碼。
識别碼的計算方法如下:
首位數字乘以1加上次位數字乘以2……以此類推,用所得的結果mod 11,所得的餘數即為識别碼,如果餘數為10,則識别碼為大寫字母X。例如ISBN号碼0-670-82162-4中的識别碼4是這樣得到的:對067082162這9個數字,從左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然後取158 mod 11的結果4作為識别碼。
編寫程式判斷輸入的ISBN号碼中識别碼是否正确,如果正确,則僅輸出“Right”;
如果錯誤,則輸出是正确的ISBN号碼。
輸入格式
輸入隻有一行,是一個字元序列,表示一本書的ISBN号碼(保證輸入符合ISBN号碼的格式要求)。
輸出格式
輸出一行,假如輸入的ISBN号碼的識别碼正确,那麼輸出“Right”,否則,按照規定的格式,輸出正确的ISBN号碼(包括分隔符“-”)。
樣例輸入
0-670-82162-4
樣例輸出
Right
樣例輸入
0-670-82162-0
樣例輸出
0-670-82162-4
C語言編寫代碼
#include<stdio.h>
int main()
{
int a[13];
char s[13];
int sum=0,yu=0;
for(int j=0;j<13;j++)
{
a[j]=0;
}
for(int i=0;i<13;i++)
{
scanf("%c",&s[i]);
}
a[0]=int(s[0]-'0');
a[2]=int(s[2]-'0');
a[3]=int(s[3]-'0');
a[4]=int(s[4]-'0');
a[6]=int(s[6]-'0');
a[7]=int(s[7]-'0');
a[8]=int(s[8]-'0');
a[9]=int(s[9]-'0');
a[10]=int(s[10]-'0');
a[12]=int(s[12]-'0');
sum=a[0]*1+a[2]*2+a[3]*3+a[4]*4+a[6]*5+a[7]*6+a[8]*7+a[9]*8+a[10]*9;
yu=sum%11;
if(yu==a[12])
printf("right");
else
{
s[12]=char(yu+'0');
for(int i=0;i<13;i++)
{
printf("%c",s[i]);
}
}
return 0;
}