시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
이진법은 컴퓨터 과학의 근본이 되는 수 체계입니다. 대부분은 삼진법, 팔진법, 십육진법 같은 다른 체계도 들어 보았을 것이고, 그것들을 사용하거나 서로 변환하는 방법도 알고 있을 것입니다. 그런데 수 체계의 밑(기수)이 음수가 될 수도 있다는 사실을 알고 있나요? 한 대학 강사가 최근 음이진수(negabinary)를 비롯해 밑이 음수인 여러 체계를 접하게 되었습니다. 이 체계로, 그리고 이 체계로부터 수를 변환하는 일을 도와줄 수 있나요?
밑이 양수 R인 체계로 적은 수는 항상 0 이상 R−1 이하의 숫자들로 이루어진 문자열입니다. 위치 P(위치는 오른쪽에서 왼쪽으로 0부터 셉니다)에 있는 숫자는 RP의 값을 가집니다. 즉 그 숫자에 RP를 곱하고 모든 위치의 값을 더합니다. 예를 들어 팔진법(R=8)에서 17024의 값은 다음과 같습니다.
1×84+7×83+0×82+2×81+4×80=4096+3584+16+4=7700.
밑이 음수 −R일 때도 원리는 같습니다. 위치 P의 숫자는 (−R)P의 값을 가집니다. 예를 들어 밑이 −8인 체계에서 17024의 값은 다음과 같습니다.
1×(−8)4+7×(−8)3+0×(−8)2+2×(−8)1+4×(−8)0=4096−3584−16+4=500.
밑이 음수인 체계의 큰 장점 하나는 음수를 적을 때 마이너스 부호가 필요 없다는 것입니다. 다음은 음이진법(R=−2)의 예시입니다.
| 십진수 | 음이진수 | 십진수 | 음이진수 | 십진수 | 음이진수 |
|---|---|---|---|---|---|
| -10 | 1010 | -3 | 1101 | 4 | 100 |
| -9 | 1011 | -2 | 10 | 5 | 101 |
| -8 | 1000 | -1 | 11 | 6 | 11010 |
| -7 | 1001 | 0 | 0 | 7 | 11011 |
| -6 | 1110 | 1 | 1 | 8 | 11000 |
| -5 | 1111 | 2 | 110 | 9 | 11001 |
| -4 | 1100 | 3 | 111 | 10 | 11110 |
앞자리에 0을 허용하지 않으면, 임의의 정수를 밑이 음수인 체계로 나타내는 방법은 유일합니다. 숫자 0으로 시작할 수 있는 유일한 수는 0 그 자체뿐입니다.
입력은 여러 개의 변환으로 이루어지며, 각 변환은 한 줄에 하나씩 주어집니다.
십진법에서 밑이 음수인 체계로의 변환은 소문자 단어 to로 시작하고, 바로 뒤에(공백 없이) 마이너스 부호와 밑 R이 붙으며, 이어서 공백 하나와 십진수 N이 옵니다. 예를 들어 to-2 10은 10을 밑이 −2인 체계로 나타낸 결과를 요구합니다.
십진법으로의 변환은 소문자 단어 from으로 시작하고, 바로 뒤에 마이너스 부호와 밑 R이 붙으며, 이어서 공백 하나와 밑이 −R인 체계로 적힌 수가 옵니다. 예를 들어 from-2 1010은 밑이 −2인 체계로 적힌 1010의 십진 값을 요구합니다.
입력은 소문자 단어 end가 적힌 줄로 끝납니다. 모든 수는 2≤R≤10과 −1,000,000≤N≤1,000,000(십진수)을 만족합니다.
각 변환마다 한 줄에 하나씩 수를 출력합니다. 입력이 십진수였다면 같은 수를 밑이 −R인 체계로 적어 출력합니다. 입력이 그런 체계로 적힌 수였다면 그 십진 값을 출력합니다.
입력과 출력의 수에는 앞자리 0이 없어야 합니다. 마이너스 부호 -는 십진법으로 적힌 음수에만 붙을 수 있으며, 음이 아닌 수나 밑이 음수인 체계로 적힌 수는 마이너스 부호로 시작해서는 안 됩니다.