Java黑皮书课后题第3章:**3.9(商业:检验ISBN-10)ISBN-10由10个个位整数d1d2d3d4d5d6d7d8d9d10组成,最后一位d10是校验和,输入前9个数,显示10位ISBN
**3.9(商業:檢驗ISBN-10)ISBN-10由10個個位整數d1d2d3d4d5d6d7d8d9d10組成,最后一位d10是校驗和,輸入前9個數,顯示10位ISBN
- 題目
- 題目概述
- 運行示例
- 破題
- 代碼
- 致謝
題目
題目概述
**3.9(商業:檢驗ISBN-10)ISBN-10由10個個位整數d1d2d3d4d5d6d7d8d9d10組成,最后一位d10是校驗和,它是使用下面的公式用另外9個數計算出來的:
(1 * d1 + 2 * d2+ 3 * d3+ 4 * d4+ 5 * d5+ 6 * d6+7 * d7 + 8 * d8+ 9 * d9) % 11
如果校驗和為10,那么按照ISBN-10的習慣,最后一位應該表示為X。編寫程序,提示用戶輸入前9個數,然后顯示10位ISBN(包括前面起始位置的0)。程序應讀取一個整數輸入
運行示例
Enter the first 9 digits of an ISBN as integer: 013601267
The ISBN-10 number is 0136012671
Enter the first 9 digits of an ISBN as integer: 013031997
The ISBN-10 number is 013031997X
破題
特別注意:int可以接收的范圍是-2147483648~2147483647(10位數),一定要記住大體范圍,不然容易像筆者一樣,出去比賽把人學校本來跑程序還挺流暢的電腦搞死機了
代碼
import java.util.Scanner;public class Test3_9 {public static void main(String[] args) {// 獲取數據Scanner input = new Scanner(System.in);System.out.print("Enter the first 9 digits of an ISBN as integer: ");String temp = input.next();int i = Integer.parseInt(temp);// 處理數據:賦值d1~d9int d1 = i / 100000000;i %= 100000000;int d2 = i / 10000000;i %= 10000000;int d3 = i / 1000000;i %= 1000000;int d4 = i / 100000;i %= 100000;int d5 = i / 10000;i %= 10000;int d6 = i / 1000;i %= 1000;int d7 = i / 100;i %= 100;int d8 = i / 10;i %= 10;int d9 = i;// 求d10int d10 =(1 * d1 + 2 * d2 + 3 * d3 + 4 * d4 + 5 * d5 + 6 * d6 +7 * d7 + 8 * d8 + 9 * d9) % 11;// 輸出String str;if(d10 < 10) {str = temp + d10;}else{str = temp + "X";}System.out.println("The ISBN-10 number is " + str);} }致謝
感謝 @StephenMoz 提醒,原程序無法輸出第一位0的問題已經解決
在此使用Integer包裝類,先通過字符串接收,再轉換為int型
任務完成后輸出字符串和校驗位
總結
以上是生活随笔為你收集整理的Java黑皮书课后题第3章:**3.9(商业:检验ISBN-10)ISBN-10由10个个位整数d1d2d3d4d5d6d7d8d9d10组成,最后一位d10是校验和,输入前9个数,显示10位ISBN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java黑皮书课后题第3章:*3.8(对
- 下一篇: Java黑皮书课后题第3章:3.10(游