天天看點

CCF 201312-2

試題編号: 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;

}

繼續閱讀