본문으로 바로가기

[Algorithm] 진법 변환 알고리즘

category Algorithm/알고리즘 2019. 2. 9. 17:30
진법 변환

진법 변환 알고리즘

 

1. 알고리즘의 이해

몫을 진법으로 나눠가면서 notation 보다 작아질 때 까지 반복한다

몫이 notation 보다 작아졌다면 반복문을 탈출한 뒤, 몫을 변환 결과 앞에 추가시켜준다

 

 

2. 소스 코드

#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;

string convertion(int num,int notation){
    string res = "";
    int mok = num;
    int nmg = 0;
    
    while(mok >= notation){
        nmg = mok % notation;
        mok /= notation;
        
        // 10진법보다 크고 나머지가 10 이상인 경우
        if(notation > 10 && nmg >= 10){
            res = (char)(nmg+55) + res;
        }else{
            res = to_string(nmg) + res;
        }
    }
    
    if(notation > 10 && mok >= 10){
        res = (char)(mok+55) + res;
    }else{
        res = to_string(mok) + res;
    }
    
    return res;
}

int main(int argc, const char * argv[]) {
    // cin,cout 속도향상
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    int num,notation;
    
    cin >> num >> notation;
    
    cout << convertion(num,notation) << "\n";
    
    return 0;
}

 

 

3. 라이브러리 사용

2진수의 경우 bitset 이라는 C++ 라이브러리를 통해 쉽게 출력 가능!!

#include <iostream>
#include <bitset>
#include <string>
#include <algorithm>
using namespace std;

int main(int argc, const char * argv[]) {
    // cin,cout 속도향상
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    int n;
    
    cin >> n;
    
    string bit = bitset<5>(n).to_string();
    
    cout << bit << "\n";
    
    return 0;
}

 

 

4. 추가 문제

int 형의 정수를 입력받아 비트 변환 후, 1의 개수를 출력해라

#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;

int convertion(int num){
    string res = "";
    int mok = num;
    int nmg = 0;
    
    while(mok >= 2){
        nmg = mok % 2;
        mok /= 2;
        
        res = to_string(nmg) + res;
    }
    res = to_string(mok) + res;
    
    int cnt = 0;
    for(int i=0; i<res.size(); i++){
        if(res[i] == '1')
            cnt++;
    }
    
    return cnt;
}

int main(int argc, const char * argv[]) {
    // cin,cout 속도향상
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    int num;
    
    cin >> num;
    
    cout << convertion(num) << "\n";
    
    return 0;
}