考題日期:2017/09/26
題號:11743
星等:1
語言:C++
題目:
題意:
今日,用信用卡網路購物已經變得相當普遍,由於使用者可能打錯信用卡號,所以一般電子商務型網站都會對信用卡號作檢查。
其中一種錯誤檢查機制稱為Luhn algorithm,它可以把所有打錯一個位數的錯誤找出來,甚至於能挑出打錯多個位數的錯誤,它的檢查規則如下:
用一個例子來講解會比較方便,例如信用卡號( 5181 2710 9900 0012 ):
程式:
#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;
}
測資: