Java 洛谷 P1055 ISBN号码
生活随笔
收集整理的這篇文章主要介紹了
Java 洛谷 P1055 ISBN号码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:https://www.luogu.com.cn/problem/P1055
輸入格式
一個字符序列,表示一本書的ISBN號碼(保證輸入符合ISBN號碼的格式要求)。
輸出格式
一行,假如輸入的ISBN號碼的識別碼正確,那么輸出Right,否則,按照規定的格式,輸出正確的ISBN號碼(包括分隔符-)。
輸入輸出樣例
輸入
0-670-82162-4
輸出
Right
輸入
0-670-82162-0
輸出
0-670-82162-4
說明/提示
2008普及組第一題
代碼實例:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//首先輸入一個字符串,例:0-670-82162-4String a = scanner.next();//看題意:sum代表從首位數乘起*1*2*3*4...一直乘到9之和;count就是計數器從1-9int sum = 0,count = 1;//這里定義mod的意義是:不用再寫判斷,當余數等于10的時候,識別碼為大寫字母X,直接獲取mod[sum%11],如果sum%11 = 10,那么mod[10]='X'char mod[] = new char[]{'0','1','2','3','4','5','6','7','8','9','X'};for (int i = 0; i < a.length()-1; i++) {if(a.charAt(i) == '-') {//continue不懂的上百度搜索,這里簡單說一下,如果說遍歷到分隔符'-'的話,就結束本次循環,下面的語句都不執行,而執行下一次循環continue;}//這里就是計算sum值//a.charAt(i) - '0',這段代碼在下面詳細解釋sum += (a.charAt(i) - '0')*count++;}if(mod[sum%11]==a.charAt(a.length()-1)) {System.out.println("Right");}else {for (int i = 0; i < a.length(); i++) {if(i==a.length()-1) {System.out.print(mod[sum%11]);}else {System.out.print(a.charAt(i));}}}scanner.close();}}代碼詳解
sum += (a.charAt(i) - '0')*count++;上面這行代碼中是怎么得到sum=158呢?
首先我們了解一下charAt()這個函數
charAt()方法從一個字符串中返回指定的字符的值
例如:
輸出
a public class luogu1_5_1055_2 {public static void main(String[] args) {String a = "abc123";System.out.println(a.charAt(3));} }輸出
1注意:此時并不會輸出其ACSLL碼值
當執行一下代碼的時候:
public class Main{public static void main(String[] args) {String a = "abc123";int sum = (a.charAt(0) + a.charAt(1));System.out.println(sum);} }輸出
195//這個就是'a'的ACSLL值97+'b'的ACSLL值98=195知識點:當執行加法運算的時候,由于返回的類型是int類型,java自動將低位的數據類型轉換為高位的數據類型,本題就是將char類型轉化為int計算,看下面的圖你就懂了
所以,我們來說上面這行代碼:
sum += (a.charAt(i) - '0')*count++;'0’的ACSLL值為48=
每次取出來的a.charAt(i)分別為:
‘0’,‘6’,‘7’,‘0’,‘8’,‘2’,‘1’,‘6’,‘2’
對應的ACSLL值為:
== 48,54,55,48,56,50,54,50
相減之后就得到了相應的結果
總結
以上是生活随笔為你收集整理的Java 洛谷 P1055 ISBN号码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 洛谷 P2141 珠心算测验
- 下一篇: Java 洛谷 P1008 三连击