본문 바로가기
알고리즘/백준

백준 2745번 진법 변환 [C++]

by seongjun 2023. 11. 26.

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

 

2745번: 진법 변환

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

www.acmicpc.net

문자열과 숫자를 입력받아, 해당 문자열을 주어진 숫자 진법으로 바꾸는 문제.

 

#include <iostream>
#include <string>
#include <map>
#include <cmath>

using namespace std;

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

    map<char, int> m;
    for (int i=0;i<10;i++){
        m.insert({'0'+i, i});
    }
    for (int i=10;i<36;i++){
        m.insert({'A'+i-10, i});
    }
    int exp = 0;
    int answer = 0;
    for (int i=n.length()-1;i>=0;i--){
        answer += m.find(n[i])->second * pow(b,exp);
        exp+=1;
    }
    cout << answer;
}

map을 통해 0~Z까지 값을 매핑시켜, 입력받은 문자열을 숫자로 변환시킨 후, 이를 각 문자열의 자릿수와 진법에 맞게 제곱한 값을 곱해주어 답을 구한다.