백준 algorithm

백준 2745 - 진법 변환

cosmohoo 2020. 4. 1. 01:40
반응형

문제 설명 

 

 

=> 진법 변환 2와 달리 B 진법으로 표시되어 있는 수를 10진법으로 변환하면 되는 문제이다. 

***

참고 : https://codingham.tistory.com/116

 

백준 11005 - 진법 변환 2

=> 간단한 진법 변환 문제이다. => 진법 변환의 알고리즘을 알아야한다. ex) 11 을 3진법으로 나타내고자 한다. 11 / 3 = 3 ... 2(나머지) 3 / 3 = 1 ... 0 1/3 = 0 ... 1 =>의 결과로 102(3) 의 결과를 얻을 수..

codingham.tistory.com

=> 알고리즘

B 진법 수 N 을 10진법으로 나타내기 

102 (3) = (1 *3^2)  + (0* 3^1) + (2* 3^0)

 

위의 식처럼 각 수에 따라 승수는 줄어들게 되고 각 자리에 해당되는 수를 계산하여 내가 원하는 값에 더해주면 되는 것이다. 

=> 본인은 여기서 answer 변수를 전체 값을 더해주는 값으로 사용하였다. 

 

 

***

10진법으로 바꾼수는 10억보다 작다 

=>

이 뜻은 최종 결과값인 answer가 int 의 범위를 넘지 않는다는 것이다. 

대략 20억을 넘는 수가 나올 경우는 Long, 혹은 long long 을 사용해야 함을 명심하자. 

 

 

 

 

 

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    string N;
    int B;
    cin >> N >> B;
    
    int length = N.length()-1;
    
    int answer=0;
    for(int i = 0; i<=length; i++)
    {
        if(N[i]>=48 && N[i] <= 57) // number
        {
            int tmp = N[i] - 48;
            answer+= (pow(B, length-i) *tmp);
        }
        
        else if(N[i]>=65 && N[i] <= 90)
        {
            int tmp = N[i] - 55;
            answer+= (pow(B, length-i) *tmp);
            
        }
    }
    
    cout << answer <<'\n';
    
    return 0;
}

 

 

 

실행 화면 1
실행 화면 2

 

 

 

 

 

 

+)

=> 이와 같이 answer 의 범위를 넘는 경우를 넣을 경우엔 쓰레기 값이 출력된다. 

 

 

 

반응형