描述 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;