第九屆藍橋杯省賽JAVA語言 C組題解_題5 書號驗證
阿新 • • 發佈:2018-12-23
JAVA語言 C組題解_題5 書號驗證
題目
標題:書號驗證
2004年起,國際ISBN中心出版了《13位國際標準書號指南》。
原有10位書號前加978作為商品分類標識;校驗規則也改變。
校驗位的加權演算法與10位ISBN的演算法不同,具體演算法是:
用1分別乘ISBN的前12位中的奇數位(從左邊開始數起),用3乘以偶數位,乘積之和以10為模,10與模值的差值再對10取模(即取個位的數字)即可得到校驗位的值,其值範圍應該為0~9。
下面的程式實現了該演算法,請仔細閱讀原始碼,填寫缺失的部分。
public class A
{
static boolean f(String s){
int k=1;
int sum = 0;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c==’-’ || c==’ ') continue;
sum += ______________________________; //填空
k++;
if(k>12) break;
}
return s.charAt(s.length()-1)-'0' == (10-sum % 10)%10;
}
public static void main(String[] args){
System.out.println(f("978-7-301-04815-3"));
System.out.println(f("978-7-115-38821-6"));
}
}
注意:只提交空缺的程式碼,不要抄寫已經存在的程式碼。
解題思路
1、分析程式碼檢視程式碼缺失的功能。
2、補充未實現的程式碼。
3、缺失的實現部分為:用1分別乘ISBN的前12位中的奇數位(從左邊開始數起),用3乘以偶數位,乘積之和
答案: i%2==0?3*(c-‘0’):(c-‘0’);
//java程式碼
static boolean f(String s) {
int k = 1;//判斷是否為前12位
int sum = 0;//儲存和
for (int i = 0; i < s.length(); i++) {//迴圈計算前12位數字的和
char c = s.charAt(i);//擷取字串中的第i位字元
if (c == '-' || c == ' ')//跳過不是數字的字元
continue;
//三元運算子判斷奇偶,奇數sum += (c-'0');偶數sum += 3*(c-'0');
sum += i%2==0?3*(c-'0'):(c- '0'); // 填空
k++;//計算完畢後k+1
if (k > 12)
break;//大於12跳出迴圈
}
//s.charAt(s.length() - 1) - '0'校檢位的值
//(10 - sum % 10) % 10;以10為模,10與模值的差值再對10取模
return s.charAt(s.length() - 1) - '0' == (10 - sum % 10) % 10;
}
public static void main(String[] args) {
System.out.println(f("978-7-301-04815-3"));
System.out.println(f("978-7-115-38821-6"));
}
}