2010年4月14日 星期三

Problem 11743 Credit Check,信用卡的 ID

此題是要用它給的方法去檢查信用卡的 ID 是否有效。

使用 gets() 讀入字串後,直接將字串索引 0、2、5、7、10、12、15、17 的每個字元轉換整數乘上 2,再將這些數的每個數字相加。接著將字串索引 1、3、6、8、11、13、16、18 的每個字元轉換整數相加。最後使上兩數相加,mod 10 後等於 0 為有效,其餘無效。寫成 C 語言程式碼如下:
while ( caseNum --)
{
gets(str);
total = ((str[0] - '0') * 2) % 10 + (str[0] - '0') * 2 / 10 +
((str[2] - '0') * 2) % 10 + (str[2] - '0') * 2 / 10 +
((str[5] - '0') * 2) % 10 + (str[5] - '0') * 2 / 10 +
((str[7] - '0') * 2) % 10 + (str[7] - '0') * 2 / 10 +
((str[10] - '0') * 2) % 10 + (str[10] - '0') * 2 / 10 +
((str[12] - '0') * 2) % 10 + (str[12] - '0') * 2 / 10 +
((str[15] - '0') * 2) % 10 + (str[15] - '0') * 2 / 10 +
((str[17] - '0') * 2) % 10 + (str[17] - '0') * 2 / 10 +
(str[1] - '0') + (str[3] - '0') + (str[6] - '0') +
(str[8] - '0') + (str[11] - '0') + (str[13] - '0') +
(str[16] - '0') + (str[18] - '0');
if (total % 10 == 0) printf("Valid\n");
else printf("Invalid\n");
}

By David.K

p11743題目連結
回ACM題庫目錄
回首頁

沒有留言: