[진법변환] 예제 문제: 진법 변환2_백준

Jin Hur·2021년 9월 16일

알고리즘(Algorithm)

목록 보기
18/49

예제 문제: 진법 변환2_백준

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


sol 1.

아주 복잡하게 푼 방식 => 시간초과

#include <bits/stdc++.h>
using namespace std;

string solution(int n, int b) {
	// 자리 수 찾기	
	int k = 0;
	int totalCount = 0;
	while (true) {		
		totalCount += (b - 1)*pow(b, k);
		if (totalCount >= n)

			break;
		else
			k++;
	}

	string s = "";

	while (k >= 0) {						
		bool flag = false;
		for (int i = (b - 1); i > 0; i--) {	
			int temp = i * pow(b, k);
			if (n >= temp) {
				if (i <= 9)
					s += i + '0';
				else if (i > 9)
					s += (i - 10) + 'A';
				flag = true;
				n -= temp;
				break;
			}
		}
		if (!flag)
			s += '0';
		k--;

	}

	return s;
}

int main() {
	int n, b;
	cin >> n >> b;

	string res = solution(n, b);

	cout << res << '\n';
}

sol 2.진법 변환 가장 간단한 솔루션

#include <bits/stdc++.h>
using namespace std;

string solution(int n, int b) {
	vector<int> arr;

	while (true) {
		if (n == 0)				// **************
			break;				// 뒷자리부터 처리!
		arr.push_back(n%b);			// (1) modulo 
		n /= b;					// (2) divide
	}						// **************

	// 벡터에 뒤쪽부터 담김. 
	string result = "";
	for (int i = arr.size() - 1; i >= 0; i--) {
		int temp = arr[i];
		if (temp < 10) {
			result += temp + '0';
		}
		else {
			result += (temp - 10) + 'A';
		}
	}
	
	return result;
}

int main() {
	int n, b;
	cin >> n >> b;

	string result = solution(n, b);
	cout << result << '\n';
}

sol 3. 더 간단한 풀이

#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;

	int b;
	cin >> b;


	string result = "";

	while (true) {
		int res = n % b;
		n /= b;

		if (res < 10) {
			result = char('0' + res) + result;
		}
		else {	// res >= 10
			res -= 10;
			result = char('A' + res) + result;
		}

		if (n == 0)
			break;
	}

	cout << result << endl;
}

0개의 댓글