1. 程式人生 > >第九屆藍橋杯省賽JAVA語言 C組題解_題5 書號驗證

第九屆藍橋杯省賽JAVA語言 C組題解_題5 書號驗證

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")); } }