2017年11月26日 星期日

[C_ST26-易] 信用卡卡號檢查(C++)

[C_ST26-易] 信用卡卡號檢查

問題描述 :
已知某信用卡號公司的信用卡卡號的規則為16個數(共1~16位),奇數位乘上1,偶數位乘上2,得到16個數,再將這16個數分別把十位數加上個位數(Ex:15->1+5=6),再產生16個新的數字,最後把這16個數字加總,若能夠被10整除則為正確卡號。

輸入說明 :
輸入一筆信用卡卡號資料。
※長度<=20
輸出說明 :
若輸入資料並非16位數則輸出「Error」,若檢查結果為正確的信用卡卡號則輸出Y,反之輸出N。
範例 :

Sample Input:Sample Output:
4048726835405438Y



  1. #include <iostream>  
  2. #include <string.h>  
  3. #include <cmath>  
  4. using namespace std;  
  5.   
  6. int main() {  
  7.     // [C_ST26-易] 信用卡卡號檢查  
  8.     string card_num;  
  9.     int len = 0;  
  10.     while(cin >> card_num)  
  11.     {  
  12.         int sum = 0; //最後16位的總和(除10的那個數)  
  13.         len = card_num.size(); //字串長度,判斷幾位數  
  14.         char card[len];  //string to char,存放字元陣列card裡  
  15.         bool Err = true//旗標值  
  16.         strcpy(card, card_num.c_str()); //string to char  
  17.         if(len != 16) //不是16位,輸出Error  
  18.         {  
  19.             cout << "Error" << endl;  
  20.         }  
  21.         else //是16位  
  22.         {  
  23.             for(int i = 1;i <= len;i++) //項數  
  24.             {  
  25.                 if(48 <= card[i-1] && card[i-1] <= 57) //判斷是否是數字,在此範圍內的是ASCII的0~9  
  26.                 {  
  27.                     if(i % 2 != 0)//奇數  
  28.                     {  
  29.                         sum = sum + card[i-1]; //加總  
  30.                     }  
  31.                     else //偶數  
  32.                     {  
  33.                         //注意現在的card[i]是char,char to int 就是以下方法  
  34.                         card[i-1] = floor((((int)card[i-1]-48)*2)/10)+((((int)card[i-1]-48))*2)%10;  
  35.                         sum = sum + ((int)card[i-1]-48);  
  36.                     }  
  37.                 }  
  38.                 else  
  39.                 {  
  40.                     cout << "Error" << endl;  
  41.                     Err = false;  
  42.                     break;  
  43.                 }  
  44.             }  
  45.             if(Err == true)  
  46.             {  
  47.                 if(sum % 10 == 0)  
  48.                 {  
  49.                     cout << "Y" << endl;  
  50.                 }  
  51.                 else  
  52.                 {  
  53.                     cout << "N" << endl;  
  54.                 }  
  55.             }  
  56.             else  
  57.             {  
  58.                 break;  
  59.             }  
  60.         }  
  61.     }  
  62.     return 0;  
  63. }  

沒有留言:

張貼留言