본문 바로가기
알고리즘

[C] 백준 11005

by mokhwasomssi 2022. 1. 7.

https://www.acmicpc.net/problem/11005

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

10진법 수 N을 B진법으로 바꾸는 문제이다. 

B의 범위는 2 ≤ B ≤ 36이다. 

 

만약에 314라는 10진수의 각 자리수를 파싱한다면

314 % 10 = 4 (출력)
314 / 10 = 31

31 % 10 = 1 (출력)
31 / 10 = 3

3 (출력)

 

나머지 연산과 나눗셈을 반복함으로써 각 자리수를 나눌수 있다. 

나누는 수는 그 수의 진법이다. (10진법이므로 10을 나누었다)

 

다른 진법에서도 똑같은 원리로 각 자리수를 구할 수 있다. 

 

연산의 반복은 재귀함수를 이용하였다. 

#include <stdio.h>

void convert(int N, int B)
{
	if (N != 0)
	{
		convert(N / B, B);
		if (N % B > 9 && B > 10)
			printf("%c", 'A' + N % B - 10);
		else
			printf("%d", N % B);
	}
}

int main()
{
	int N;
	int B;

	scanf("%d", &N);
	scanf("%d", &B);

	convert(N, B);

	return 0;
}