문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
1. A~Z는 문자이므로 <string>을 include 해주고 문자를 입력받게 한다.
2. ex) 1546(3) = (6*3^0) + (4*3^1) + (5*3^2) + (1*3^3)
3. 진법을 string으로 입력받으니 0~9 경우에는 아스키 값 '0'을 빼주어 정수 0~9로 계산되게 한다.
4. 제곱 수를 구하는 pow 함수 이용을 위해 <cmath>를 include 해준다.
#include <iostream>
#include <string>
#include <cmath>
int main()
{
std::string N;
int B;
int result = 0;
std::cin >> N >> B;
int len = N.length();
for(int i=0; i<len; i++)
{
if( N[i]>='0' && N[i]<='9')
{
result += (N[i]-'0')*std::pow(B, len-1-i);
}
else
{
result += (N[i]-'A'+10)*std::pow(B, len-1-i);
}
}
std::cout << result << std::endl;
return 0;
}