1. 程式人生 > >CSP201312-2:ISBN號碼

CSP201312-2:ISBN號碼

第一個 total 復試 == num new 輸出 turn tab

引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中國計算機學會(CCF)發起的"計算機職業資格認證"考試,針對計算機軟件開發、軟件測試、信息管理等領域的專業人士進行能力認證。認證對象是從事或將要從事IT領域專業技術與技術管理人員,以及高校招考研究生的復試對象。

  • 問題描述

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

  • 源代碼

# include <stdio.h>

int main(void)

{

char isbn[14];

scanf("%s", isbn);

int num = 1; //乘數,每次累加1

int total = 0;

for (int i = 0; i < 11; i++)

{

if (i == 1 || i == 5) //i=1,5的位置是-

{

continue;

}

int temp = isbn[i] - ‘0‘;

temp *= num;

num += 1;

total += temp;

}

int id = total % 11;

//判斷余數是否為10

if (id == 10)

{

if (isbn[12] == ‘X‘)

{

printf("Right\n");

}

else

{

isbn[12] = ‘X‘;

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

}

}

else

{

if (id == (isbn[12] - ‘0‘))

{

printf("Right\n");

}

else

{

isbn[12] = (char)(id + ‘0‘);

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

}

}

return 0;

}

CSP201312-2:ISBN號碼