문제
https://www.acmicpc.net/problem/14561
n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. 예를 들면, 12468은 12468 = 1 × 104 + 2 × 103 + 4 × 102 + 6 × 101 + 8 × 100로 표현할 수 있다.
회문(Palindrome)이란 앞으로 읽으나 뒤로 읽으나 같은 글을 말한다. 예를 들면, madam, level, 12321은 회문이다. 반면에, Chung-ang이나 university, 54899는 회문이 아니다.
어떤 십진수의 수 A가 주어졌을 때, 이를 n진수로 표현하면 회문인지 아닌지 판별하는 프로그램을 만드시오.
입력
첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.
둘째 줄부터 T줄에 걸쳐 테스트 케이스별로 어떤 십진수의 수 A(1 ≤ A ≤ 100,000,000,000)와 n(2 ≤ n ≤ 16)이 공백을 두고 주어진다.
출력
각 줄마다 테스트 케이스가 회문일 경우 1, 아닐 경우에는 0을 출력한다.
풀이
이 문제는 진법 변환과 회문 비교가 적절히 섞인 문제라고 할 수 있습니다.
입력받은 십진수를 입력받은 진수로 변환한 후, 그 수가 회문인지 아닌지를 비교하는 것입니다.
우선 입력받은 십진수를 맞는 진수로 변환하기 위해서는 반복 과정이 필요합니다.
반복적으로 십진수를 나누고, 그 나머지를 각 자리에 추가해 나가는 방식으로 계산을 해줍니다.
진수 변환이 끝났다면, 이제 회문 비교를 할 차례 입니다.
간단하게 그 수가 그 수를 뒤집은 것과 같다면 회문이기 때문에 1을 출력,
아니라면 0을 출력하도록 합니다.
코드
loop = int(input())
for i in range(loop):
num, format = map(int, input().split())
result = ""
while num > 0:
tmpLeft = num % format
if tmpLeft > 9:
tmpLeft = chr(55 + tmpLeft)
result = str(tmpLeft) + result
num //= format
if result == result[::-1]:
print(1)
else:
print(0)