진법 변환
제한시간: 1000 ms 메모리제한: 64 MB
A진법 수 N을 입력 받아 B진법 수로 출력하는 프로그램을 작성하시오.
N에 사용되는 값은 0 ~ 9, A ~ Z이다.
(2 <= A, B <= 36) ( 0<= N<= 263-1 )
입력은 100개 이하의 테스트 케이스가 행으로 구분하여 주어진다. 테스트 케이스의 끝에는 0이 주어진다. 각 테스트 케이스에는 세 수 A, N, B가 공백으로 구분되어 주어진다.
각 테스트 케이스에 대하여 A진법수 N을 B진법 수로 변환한 결과를 행으로 구분하여 출력한다.
2 11010 8
2 10110 10
10 2543 16
16 ABC 8
0
32
22
9EF
5274
#include <stdio.h>
long long ctod(char n[], int a) // 진법에서 이
{
long long num = 0;
for (int i = 0; n[i]; i++) {
if (n[i] < 'A') num = num * a + n[i] - '0';
else num = num * a + n[i] - 'A' + 10;
}
return num;
}
char ch[40] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 36진수 이내의 값이므로 미리 만들어둠
void dtoc(long long num, int b)
{
if (num <= 0) return;
dtoc(num / b, b); // 재귀로 진법 변환
printf("%c", ch[num % b]);
}
int main()
{
freopen("input.txt", "r", stdin);
int A, B;
while (1) {
char N[70];
scanf("%d", &A);
if (A == 0) break;
scanf("%s %d", N, &B);
if (N[0] == '0') printf("0\n");
else {
dtoc(ctod(N, A), B);
printf("\n");
}
}
return 0;
}
'Algorithms > simulation' 카테고리의 다른 글
테트리스 (0) | 2020.01.10 |
---|---|
테트리스 (0) | 2020.01.10 |
비밀편지 (0) | 2020.01.09 |
Square (0) | 2020.01.09 |
연속부분합 찾기 (0) | 2020.01.09 |
댓글