https://www.acmicpc.net/problem/2745
문제 해석
진법 수 B와 바꿔 줄 수 N을 입력 받은 후에 10진법의 수로 변환하여 출력하는 문제이다.
2진법을 10진법으로 바꿔주는 원리와, 문자열에서의 각각의 문자는 아스키코드값으로 변환 가능하다는 것을 알고 있다면 문제를 쉽게 해결할 수 있다.
코드
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string N;
int B;
int result;
int cnt = 0;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N >> B;
for (int i = N.length() - 1; i >= 0; i--) {
if (N[i] >= 'A' && N[i] <= 'Z')
result += (N[i] - 'A' + 10) * ((int)pow(B, cnt));
else
result += (N[i] - '0') * ((int)pow(B, cnt));
cnt++;
}
cout << result << '\n';
return 0;
}
문제풀이
N과 B를 입력받은 후, 문자열의 N의 길이 -1부터 (배열로 저장할때의 주소값은 -1의 값을 가진다.) 0까지 -1해가며 반복문을 돌려주고, 문자를 int값으로 변환해준 값이 10미만일 때는 '0'을 빼주고 10이상 35이하 일때는 'A'를 빼주고 10을 더해준다. 그런 후 2진수를 10진수로 바꿀때 각 자리수에 2를 곱해준 것처럼 B를 곱해주게 되면 값을 구할 수 있다. (pow()는 거듭제곱을 사용할 수 있는 c++에서 제공하여 주는 함수이다.)
'Koala - 6기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/python]10773번 제로 (0) | 2022.04.10 |
---|---|
[백준/Python] 3986번:좋은 단어 (0) | 2022.04.10 |
[백준/Python] 2789번: 유학 금지 (0) | 2022.04.10 |
[백준/Python] 14582번: 오늘도 졌다 (0) | 2022.04.09 |
[백준/Python] 11719번: 그대로 출력하기2 (0) | 2022.04.08 |