이상한 수
면접 대비시간 제한1초메모리 제한128 MB
여러 질의에 대해 십진수와 음수 진법 표현 사이를 양방향으로 변환하고 end가 나오면 종료하는 프로그램을 작성합니다.
문제
이진법은 컴퓨터 과학의 근본이 되는 수 체계입니다. 대부분은 삼진법, 팔진법, 십육진법 같은 다른 체계도 들어 보았을 것이고, 그것들을 사용하거나 서로 변환하는 방법도 알고 있을 것입니다. 그런데 수 체계의 밑(기수)이 음수가 될 수도 있다는 사실을 알고 있나요? 한 대학 강사가 최근 음이진수(negabinary)를 비롯해 밑이 음수인 여러 체계를 접하게 되었습니다. 이 체계로, 그리고 이 체계로부터 수를 변환하는 일을 도와줄 수 있나요?
밑이 양수 인 체계로 적은 수는 항상 이상 이하의 숫자들로 이루어진 문자열입니다. 위치 (위치는 오른쪽에서 왼쪽으로 0부터 셉니다)에 있는 숫자는 의 값을 가집니다. 즉 그 숫자에 를 곱하고 모든 위치의 값을 더합니다. 예를 들어 팔진법()에서 의 값은 다음과 같습니다.
밑이 음수 일 때도 원리는 같습니다. 위치 의 숫자는 의 값을 가집니다. 예를 들어 밑이 인 체계에서 의 값은 다음과 같습니다.
밑이 음수인 체계의 큰 장점 하나는 음수를 적을 때 마이너스 부호가 필요 없다는 것입니다. 다음은 음이진법()의 예시입니다.
앞자리에 0을 허용하지 않으면, 임의의 정수를 밑이 음수인 체계로 나타내는 방법은 유일합니다. 숫자 0으로 시작할 수 있는 유일한 수는 0 그 자체뿐입니다.
입력
입력은 여러 개의 변환으로 이루어지며, 각 변환은 한 줄에 하나씩 주어집니다.
십진법에서 밑이 음수인 체계로의 변환은 소문자 단어 to로 시작하고, 바로 뒤에(공백 없이) 마이너스 부호와 밑 이 붙으며, 이어서 공백 하나와 십진수 이 옵니다. 예를 들어 to-2 10은 을 밑이 인 체계로 나타낸 결과를 요구합니다.
십진법으로의 변환은 소문자 단어 from으로 시작하고, 바로 뒤에 마이너스 부호와 밑 이 붙으며, 이어서 공백 하나와 밑이 인 체계로 적힌 수가 옵니다. 예를 들어 from-2 1010은 밑이 인 체계로 적힌 의 십진 값을 요구합니다.
입력은 소문자 단어 end가 적힌 줄로 끝납니다. 모든 수는 과 (십진수)을 만족합니다.
출력
각 변환마다 한 줄에 하나씩 수를 출력합니다. 입력이 십진수였다면 같은 수를 밑이 인 체계로 적어 출력합니다. 입력이 그런 체계로 적힌 수였다면 그 십진 값을 출력합니다.
입력과 출력의 수에는 앞자리 0이 없어야 합니다. 마이너스 부호 -는 십진법으로 적힌 음수에만 붙을 수 있으며, 음이 아닌 수나 밑이 음수인 체계로 적힌 수는 마이너스 부호로 시작해서는 안 됩니다.