백준

2745번 진법 변환

짱짱이_ 2024. 7. 21. 22:29

 

문제

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;
}

'백준' 카테고리의 다른 글

2292번 벌집  (0) 2024.07.30