iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1
自我挑戰組

一日一CPE系列 第 21

[Day21]11743: Credit Check

  • 分享至 

  • xImage
  •  

考題日期:2017/09/26
題號:11743
星等:1
語言:C++


題目:
https://ithelp.ithome.com.tw/upload/images/20191007/20120937WhXEBCqGD1.png


題意:
今日,用信用卡網路購物已經變得相當普遍,由於使用者可能打錯信用卡號,所以一般電子商務型網站都會對信用卡號作檢查。
其中一種錯誤檢查機制稱為Luhn algorithm,它可以把所有打錯一個位數的錯誤找出來,甚至於能挑出打錯多個位數的錯誤,它的檢查規則如下:
用一個例子來講解會比較方便,例如信用卡號( 5181 2710 9900 0012 ):

  1. 將偶數位置上的數字乘2,也就是將 (5181 2710 9900 0012 )中粗體底線的數字乘2,得到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,再將兩數相加25+20=45。
  3. 45的個位數並非0,所以這個信用卡號並不合法。
    本題請你用此法檢查信用卡號是否正確。

程式:


#include <iostream>

using namespace std;

int main()
{
    int test;
    cin>>test;
    while(test--)
    {
        int key[4],odd = 0,even = 0;
        for(int i = 0 ; i < 4 ; i++)
        {
            cin>>key[i];
            int k = 1;
            while(key[i]!=0)
            {
                if(k % 2 == 0)
                {
                    int a  = (key[i] % 10) * 2;
                    while(a>0)
                    {
                        even += a % 10;
                        a /= 10;
                    }
                }
                else
                {
                    odd += key[i] % 10;
                }
                key[i] /= 10;
                k++;
            }
        }
        if((even + odd) % 10 == 0)
            cout<<"Valid"<<endl;
        else
            cout<<"Invalid"<<endl;
    }
   return 0;
}

測資:
https://ithelp.ithome.com.tw/upload/images/20191007/20120937eRwa674wOz.png


上一篇
[Day20]11264: Coin Collector
下一篇
[Day22]12650: Dangerous Dive
系列文
一日一CPE30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言