백준 11576 c++ : 구현, 진법

magicdrill·2025년 3월 31일
0

백준 문제풀이

목록 보기
577/654

백준 11576 c++ : 구현, 진법

A진법을 10진법으로 변환 후 다시 B진법으로 변환했다. java에는 유연하게 진법을 변환하는 함수가 있는데 C++에는 없는거 같다.

#include <iostream>
#include <vector>

using namespace std;

void input_data(int* A, int* B, vector<int>& numbers);
void find_answer(int A, int B, vector<int>& numbers);

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int A, B;
	vector<int> numbers;

	input_data(&A, &B, numbers);
	find_answer(A, B, numbers);

	return 0;
}

void input_data(int* A, int* B, vector<int>& numbers) {
	int m, i, num;

	cin >> *A >> *B;
	cin >> m;
	for (i = 0; i < m; i++) {
		cin >> num;
		numbers.push_back(num);
	}

	return;
}

void find_answer(int A, int B, vector<int>& numbers) {
	//A진법을 B진법으로 바꿈
	//numbers에 들어있는 숫자들은 A진법의 숫자의 자리수의 개수
	//A진법으로 나타낸 수를 B진법으로 변환

	/*
	17진법 2 16을 8진법 으로 바꾸면 6 2
	17진법을 10진법으로 바꾸고, 8진법으로?
	*/

	int decimal = 0;
	int i;
	int div = 1;
	vector<int> answer;
	
	for (i = numbers.size() - 1; i >= 0; i--) {
		decimal += (numbers[i] * div);
		div *= A;
		cout << "decimal : " << decimal << " / div : " << div << "\n";
	}

	while (decimal > 0) {
		answer.push_back(decimal % B);
		decimal /= B;
	}
	for (i = answer.size() - 1; i >= 0; i--) {
		cout << answer[i] << " ";
	}
	cout << "\n";

	return;
}

0개의 댓글