Study hard

(c++)백준 2745번: 진법 변환 본문

백준/여러가지 문제들

(c++)백준 2745번: 진법 변환

Nimgnoej 2020. 6. 17. 16:49

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

 

2745번: 진법 변환

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

www.acmicpc.net

[풀이]

N에 'ZZZZZ'와 같은 문자열이 올 수 있으므로 string에 N값을 입력하였다.

N의 각 자릿수마다 (B^(자릿수)) * (해당 자리의 수)를 반복하여 모두 합하여 풀었다.

B가 11이상이고 수가 10 이상이면 위의 연산을 하기 전에 원래 숫자로 바꿔줘야 한다.

 

#include <iostream>
#include <string>
#include <cmath>//pow
using namespace std;

string N;
int B;

void getNum() {
	int tenNum = 0;
	int p = 0;
	for (int i = N.size() - 1; i >= 0; i--) {
		//N[i]가 10 이하면
		if (N[i] >= '0' && N[i] <= '9') {
			//(B^(자릿수))*(해당 자리의 수)
			tenNum += pow(B, p)*int(N[i] - '0');
		}
		else {
			//원래 숫자 찾아주기
			tenNum += pow(B, p)*int(N[i] - 55);
		}
		p++;
	}
	cout << tenNum << endl;
}

int main() {
	cin >> N >> B;
	getNum();
	return 0;
}