문제
신용카드는 총 16자리의 숫자로 구성되어 있다. 언뜻 보기에는 무작위로 된 숫자로 구성되어 있는 것 같이 보이지만 그 속에는 하나의 수학적 비밀이 숨겨져 있다. 그중 하나가 카드 번호가 유효 한지 유효하지 않은 지 검사하는 Luhn 공식이다. 그 공식은 다음과 같다.
- 신용카드의 16자리 숫자에서 맨 우측 수부터 세어 홀수 번째 수는 그대로 두고, 짝수 번째 수를 2배로 만든다.
- 2배로 만든 짝수 번째 수가 10 이상인 경우, 각 자리의 숫자를 더하고 그 수로 대체한다.
- 이와 같이 얻은 모든 자리의 수를 더한다.
- 그 합이 10으로 나뉘면 “정당한 번호”(유효)이고 그렇지 않으면 “부당한 번호”(유효하지 않음)로 판정된다.
다음 공식을 이용해 주어진 신용카드의 번호가 유효한지, 유효하지 않은 지 판단해라.
입력
첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.
그 다음 줄부터 테스트 케이스에 해당하는 신용카드 번호가 주어진다.
출력
신용카드의 번호가 유효하면 “T”, 유효하지 않으면 “F”를 한 줄 씩 출력한다.
예제 입력 1
3 2720992711828767 3444063910462763 6011733895106094 |
예제 출력 1
T F T |
더보기
Solution
#include<stdio.h>
int main(void)
{
int T;
scanf("%d", &T);
for(int t=0;t<T;t++)
{
int sum=0, card[16];
for(int i=0;i<16;i++)
{
scanf("%1d", &card[i]);
sum+=i%2==1?card[i]:card[i]*2>9?2*card[i]/10+2*card[i]%10:2*card[i];
}
printf("%c\n", sum%10==0?'T':'F');
}
return 0;
}
728x90
'백준 알고리즘' 카테고리의 다른 글
<백준 알고리즘> 15965번: K번째 소수 (0) | 2020.11.28 |
---|---|
<백준 알고리즘> 13866번: 팀 나누기 (0) | 2020.11.28 |
<백준 알고리즘> 2903번: 중앙 이동 알고리즘 (0) | 2020.11.26 |
<백준 알고리즘> 12833번: XORXORXOR (0) | 2020.11.26 |
<백준 알고리즘> 17087번: 숨바꼭질 6 (0) | 2020.11.26 |