본문 바로가기
  • < / >
Algorithm/Beakjoon

[백준] 2745 진법 변환 (C++)

by JunMango 2023. 5. 15.

 

진법변환

 

문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

 

예시

입력 출력
ZZZZZ 36 60446175

문제 해석

이 문제는 수학, 구현, 문자열 문제로 숫자 다음에 A~Z 를 어떻게 지정 하여야 할까가 고민이 됬던 문제이다.

해결 방법은 ASCII code를 이용해서 A부터 10으로 순서대로 만들어 주자

 

ex). int a = 'A'; 의 출력은 65 이고  a를 10으로 지정해 주고 싶다면

        a-'A' +10 으로 초기화 한다.

 

C++

#include <iostream>
#include <string>

#include <cmath>

using namespace std;

int main() {
    string num;
    int B;
    int sum = 0;
    cin >> num >> B;
    for (int i = 0; i < num.size(); i++) {
        if (num[i] >= '0' && num[i] <= '9') {
            sum = sum + (num[i] - '0') * pow(B, num.size() - 1 - i);
        } else {
            sum = sum + (num[i] - 'A' + 10) * pow(B, num.size() - 1 - i);
        }
    }
    cout << sum;
}

'Algorithm > Beakjoon' 카테고리의 다른 글

[백준] 2563_색종이 (C++)  (0) 2023.05.14
[백준] 10798 (C++)  (0) 2023.05.13
[백준] 2908 (python)  (0) 2022.11.09
[백준] 1152 (python)  (0) 2022.10.24
[백준] 1157 (python)  (0) 2022.10.23

댓글