每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括99位數字、11位識別碼和33位分隔符,其規定格式如x-***-***xx-x,其中符號-就是分隔符(鍵盤上的減號),最後一位是識別碼,例如0-670-82162-4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如00代表英語;第乙個分隔符-之後的三位數字代表出版社,例如670670代表維京出版社;第二個分隔符後的五位數字代表該書在該出版社的編號;最後一位為識別碼。
識別碼的計算方法如下:
首位數字乘以11加上次位數字乘以22……以此類推,用所得的結果 \bmod 11mod11,所得的餘數即為識別碼,如果餘數為1010,則識別碼為大寫字母xx。例如isbn號碼0-670-82162-4中的識別碼44是這樣得到的:對067082162這99個數字,從左至右,分別乘以1,2,…,91,2,…,9再求和,即0×1+6×2+……+2×9=1580×1+6×2+……+2×9=158,然後取158 \bmod 11158mod11的結果44作為識別碼。
你的任務是編寫程式判斷輸入的isbn號碼中識別碼是否正確,如果正確,則僅輸出right;如果錯誤,則輸出你認為是正確的isbn號碼。
輸入格式
乙個字串行,表示一本書的isbn號碼(保證輸入符合isbn號碼的格式要求)。
輸出格式
一行,假如輸入的isbn號碼的識別碼正確,那麼輸出right,否則,按照規定的格式,輸出正確的isbn號碼(包括分隔符-)。
0-670-82162-4
right
0-670-82162-0
0-670-82162-4
#include
//**簡潔明瞭(個人觀點)
intmain
(void)if
(mod[t%11]
== a[12]
)printf
("right");
else
return0;
}
#include
#include
#include
#include
#define ll long long
using namespace std;
char c[
105]
;int a[
105]
;int
main()
top--
; ll sum=0;
for(
int i=
1;i<=top;i++
) sum+
=a[i]
*i;//printf("%d\n",sum);
sum%=11
;// printf("%d\n",sum);
if(sum+
'0'==c[len])if
(sum==
10&&c[len]
=='x')if
(sum==10)
else c[len]
=sum+
'0';
cout<1<}
洛谷 P1055 ISBN號碼
每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如 x xx x 其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0代表英語 第乙個分...
洛谷 P1055 ISBN號碼
題目描述 每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括99位數字 11位識別碼和33位分隔符,其規定格式如x xx x,其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如00代...
洛谷P1055ISBN號碼題解 zhengjun
題目描述 每一本正式出版的圖書都有乙個isb nisbn isbn 號碼與之對應,isb nisbn isbn 碼包括9 99位數字 1 11位識別碼和3 33位分隔符,其規定格式如x xx x,其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isb...