알고리즘/codewars

codewars Validate Credit Card Number

꾸준함. 2018. 2. 1. 02:02

문제 링크입니다:

알고리즘 설명이 다 되어있기 때문에 그대로 코드만 작성해주면 됩니다.


/*

Lune 알고리즘은 신용카드의 번호가 맞는지 확인할 때 쓰인다.

최대 16자리 숫자가 주어졌을 때 카드 번호가 맞으면 true 틀리면 false를 반환하시오

 

알고리즘은 다음과 같다:

1.자릿수가 홀수이면 홀수번째 숫자들에 2를 곱한다

  자릿수가 짝수이면 짝수번째 숫자들에 2를 곱한다.

2.두배를 했을 때 해당 숫자가 9를 넘긴다면 각 자릿수끼리 더하거나 해당 숫자에서 9를 뺀다

3.모든 자릿수의 숫자를 더한다.

4.10으로 나누었을 때 나머지가 0이면 true, 그 외의 경우 false이다

*/

#include <iostream>

#include <vector>

using namespace std;

 

class Kata{

public:

        static bool validate(long long int n);

};

 

bool Kata::validate(long long int n)

{

        long long int temp = n;

        std::vector<int> v;

        while (temp > 0)

        {

               v.push_back(temp % 10);

               temp /= 10;

        }

        for (int i = 1; i < v.size(); i += 2) //거꾸로 했을 떄 짝수번째 자릿수에만 2를 곱하면된다

        {

               v[i] *= 2;

               if (v[i] > 9)

                       v[i] -= 9;

        }

        int sum = 0;

        for (int i = 0; i < v.size(); i++)

               sum += v[i];

        if (sum % 10)

               return false;

        else

               return true;

}

 

int main(void)

{

        cout << Kata::validate(891) << endl;

        cout << Kata::validate(2121) << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > codewars' 카테고리의 다른 글

codewars: RGB To Hex Conversion  (0) 2018.02.07
codewars: Fun with trees: is perfect  (0) 2018.02.06
codewars: Playing on a chessboard  (0) 2018.02.01
codewars: Tank Truck  (0) 2018.01.30
codewars: Statistics for an Athletic Association  (0) 2018.01.30