a159. 11743 - Credit Check
標籤 :
通過比率 : 867人/1260人 ( 69% ) [非即時]
評分方式:
Tolerant

最近更新 : 2011-08-21 16:43

內容
這些日子以來,使用信用卡在網路上購買東西已經變的司空見慣。
但是因為信用卡卡號比較長,很容易在輸入他們的時候打錯。
為了快速的識別錯誤,如數字打錯,大多數的電子商務網站都會用一種校檢演算法來確認信用卡卡號

一種較為流行的校檢演算法叫做 "Luhn"演算法 (Luhn algorithm),它可以檢測任何一位元的錯誤及多位元錯誤:

1.從倒數第二個位元開始,將他們放到後面,並且加倍其他沒有移動的位元到另一個列表
2.把列表內的數字的位元加總(n),再把被移到後面的數字加總(m),在把兩個數加起來 (n+m)
3.如果這個數字的結尾是0,則信用卡卡號為合法的,反之則是不合法的。

這裡有個例子,以這組號碼為例 5181 2710 9900 0012:

1.把相對應的數字加倍後,放到另一個列表 (5 181 2719900012) :10,16,4,2,18,0,0,2。

2.把這些數的位元加起來得到 (1+0) + (1+6) + 4 + 2 + (1+8) + 0 + 0 + 2=25
  沒有對應到的位元合為1+1+7+0+9+0+0+2 = 20 , 所以最後的總和是 20 + 25 = 45。

3. 45不是以0結尾,故這組信用卡號並不合法。
 
 

對於這個問題,你需要寫一個根據 Luhn演算法的程式來確認輸入的信用卡號是否合法。
輸入說明

輸入的第一行為N 代表接下來有幾組測試資料

之後的N行

每行包含一行信用卡號碼

每個信用卡號碼由16個 10進位位數字組成四組,並且以空白分隔

輸出說明

 輸出包含一行文字

如果號碼是合法的,請輸出"Valid"

如果不合法,請輸出"Invalid" 

範例輸入 #1
2
5181 2710 9900 0012
5181 2710 9900 0017
範例輸出 #1
Invalid
Valid
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (100%): 2.0s , <50M
提示 :

測資頗大,請小心駕駛 :D


Uva原題

標籤:
出處:
UVa11743 [管理者: grd (保持好奇心) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
36688 fire5386 (becaidorz) a159
題解
338 2023-08-02 22:37
31442 krameri120 (科科) a159
C語言解題
781 2022-07-31 15:31
31435 406490150@gm ... (我是朱朱) a159
642 2022-07-31 01:26
25024 asnewchien@g ... (david) a159
解題影片
1148 2021-04-14 15:31
24518 fire5386 (becaidorz) a159
鬼之優化
1644 2021-03-01 14:39