반응형
https://www.acmicpc.net/problem/2745
이 문제는 B진법을 10진법으로 변환시켜주는 알고리즘이다.
아이디어
우선 어떻게 풀까라는 생각에서, 우리가 프로그래밍 할 때 2진법에서 10진법으로 전환할 때 사용하는 기법을 사용하면 풀 수 있을거라는 생각을 하였다.
예를 들어 1001(2) 이진법인 수를 10진법으로 나타 날 때 1*2^3 + 1 * 2^0으로 계산하여 9(10) 10진수로 나타낼 수 있다.
이와 같이 B진법을 10진법으로 나타내기 위해,
10 미만일 떄는 때는 문자 자료형 '0'으로 빼주면 그 숫자 값이 나올 것이고,
10이상 35이하 일 때는 A B C....Z까지 표현할 수 있기 때문에 'A'를 빼주고 더하기 10을 해주면 해당 자리수의 값을 십진수로 알 수 있다. 이진법을 10진법으로 전환하는 법처럼 곱하기 2 대신해서 B를 곱해서 나타내면 B진법을 10진수로 나타낼 수 있다.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string N;
int B;
int result;
void solution() {
cin >> N >> B;
int length = N.length();
int count = 0;
for (int i = length - 1; i >= 0; i--) {
int temp = N[i];
if (temp >= 'A' && temp <= 'Z') {
result += (temp - 'A' + 10) * ((int)pow(B, count));
}
else {
result += (temp - '0') * ((int) pow(B, count));
}
count++; //자릿수 0부터 자리 개수-1까지
}
cout << result << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solution();
return 0;
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 16922] 로마 숫자 만들기 C++ (0) | 2020.07.22 |
---|---|
[백준 10971] 외판원 순회 2 C++ (0) | 2020.07.17 |
[백준 10974] 모든 순열 C++ (0) | 2020.07.17 |
[백준 10819] 차이를 최대로 C++ (0) | 2020.07.17 |
[백준 1978] 소수찾기 C++ (0) | 2020.07.02 |