본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2017] : 진법 변환

by 조원일 2020. 2. 19.
728x90

1. 문제

https://codeup.kr/problem.php?id=2017

 

진법 변환

정수 n과 k가 공백으로 분리되어 입력된다. ( 0 <= n <= 200,000,000 ), (2 <= k <= 36)

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 10진법으로 입력된 수를 주어지 진수로 변환하는 문제입니다.

진법 변화를 하는 방법은 다음을 예를 들어 설명 드리겠습니다.

*10진법 -> 2진법

10 / 2 = 5 ....... 0

5 / 2 = 2 ....... 1

2 / 2 = 1 ....... 0

1 / 2 = 0 ....... 1

10(10) -> 1010(2)

10진법을 몫이 0이 될때까지 2로 나누어주고 나머지를 역순으로 읽어주면 됩니다.

 

 

2. 해답

#include <stdio.h>

char format(int n) {
	if (n < 10) {
		return (char)(n + 48);
	}
	else {
		return (char)(n + 55);
	}
}

int main() {
	int n, k;
	int tmp, a = 0;
	char Arr[28];
	scanf("%d %d", &n, &k);

	for (int i = 0; i < 28; i++) {
		if (n / k == 0) {
			Arr[i] = format(n); // 마지막 수를 배열에 입력
			a = i; // 몇자리의 수인지 확인
			break;
		}
		Arr[i] = format(n % k); // n을k로 나눈 나머지를 입력
		n /= k;
	}

	for (int i = a; i >= 0; i--) {
		printf("%c", Arr[i]); // 변환 후에는 역순으로 출력
	}

	return 0;
}