본문 바로가기
Algorithms/simulation

진법 변환

by OKOK 2020. 1. 10.

진법 변환

제한시간: 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

댓글