天天看點

isbn

描述 description

   每一本正式出版的圖書都有一個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号碼。

輸入格式 inputformat

   輸入隻有一行,是一個字元序列,表示一本書的isbn号碼(保證輸入符合isbn号碼的格式要求)。 

輸出格式 outputformat

   輸出共一行,假如輸入的isbn号碼的識别碼正确,那麼輸出“right”,否則,按照規定的格式,輸出正确的isbn号碼(包括分隔符“-”)。

樣例輸入:

樣例1:

0-670-82162-4

樣例2:

0-670-82162-0

樣例輸出:

right

代碼:

#include <stdio.h>

#include <string.h>

#include <ctype.h>

char s[15];

int a[15];

int main(int argc, char *argv[])

{

int i,m=0,c,d=0;

scanf("%s",s);

for(i=0;i<strlen(s)-1;i++)

if(isdigit(s[i])) a[++d]=s[i]-‘0‘;

for(i=1;i<=d;i++){

m+=i*a[i];

}

c=s[strlen(s)-1]-‘0‘;

if(m%11==c||(m%11==10&&s[strlen(s)-1]==‘x‘)) printf("right\n");

else{

if(m%11==10) s[strlen(s)-1]=‘x‘;

else s[strlen(s)-1]=m%11+‘0‘;

printf("%s\n",s);

return 0;