티스토리 뷰
문제:신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효 한지 유효하지 않은 지 검사하는 Luhn 공식이다. 그 공식은 다음과 같다.
- 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만든다.
- 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체한다.
- 이와 같이 얻은 모든 자리의 수를 더한다.
- 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정된다.
다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단해라.
풀이:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<stdio.h> int main() { int n; int num; int sum, cnt; char card[17]; scanf("%d", &n); while (n--) { sum = 1, cnt = 0; memset(card,'\0',sizeof(card)); scanf("%s", card); for (int i = 15; i >= 0; i--) { if (sum % 2 == 1) { cnt += card[i] - '0'; } else { num = (card[i] - '0') * 2; if (num >= 10) { cnt += (num / 10) + (num % 10); } else { cnt += num; } } sum++; } if (cnt % 10 == 0) { printf("T\n"); } else { printf("F\n"); } } } | cs |
먼저 n에 테스트 케이스를 받는다.
반복문안에선 테스트케이스만큼 반복하고
카드번호를 받고, 또 반복문으로 카드길이만큼 실행한다.
짝수와 홀수를 구분하고 cnt부분에 최종수를 저장,
10으로 나뉘면 T 아니면 F를 출력한다.
'백준' 카테고리의 다른 글
BOJ]3035번_스캐너 (0) | 2019.06.03 |
---|---|
BOJ]3034번_앵그리 창영 (0) | 2019.06.01 |
BOJ]2864번_5와 6의 차이 (1) | 2019.05.27 |
BOJ]7572번_간지 (0) | 2019.05.27 |
BOJ]15917번_노솔브 방지문제야!! (0) | 2019.05.27 |
댓글