진법변환
문제
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 |
댓글