ISBN號碼
題目來源:NOIP2008普及組
時間限制:\(1000ms\) 記憶體限制:\(64mb\)
題目描述
每一本正式出版的圖書都有一個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號碼(包括分隔符“-”),
樣例輸入1
0-670-82162-4
樣例輸出1
Right
樣例輸入2
0-670-82162-0
樣例輸出2
0-670-82162-4
解題思路
一個處理字串的基礎題目,因為題目保證輸入符合ISBN號碼的格式要求,所以可以直接用 char 型陣列直接輸入,然后處理計算就可以了,
需要注意的點是,識別碼為大寫字母X的時候,需要單獨處理,
如果我想到更好的解法就更新這篇博客,
解題代碼-Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
char[] str = input.nextLine().toCharArray();
input.close();
long ans = 0;
int i = -1, x = 1;
while (i++ < str.length) {
if (x > 9) break;
if (str[i] == '-') continue;
ans += (long) (str[i] - '0') * x++;
}
i++;
ans %= 11;
if ((str[i] == 'X' && ans == 10) || (str[i] - '0' == ans)) {
System.out.println("Right");
} else {
if (ans == 10) {
str[i] = 'X';
} else {
str[i] = (char) (ans + '0');
}
System.out.println(str);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256632.html
標籤:其他
上一篇:單向鏈表及使用Java代碼實作
