코테 & 알고리즘

[코테/C++] n진법 변환

왈왈디 2023. 7. 25. 13:10
728x90

문제에서 10진수를 n진법 수로 변환하라고 하는 경우가 있다.

아래는 10진수 n = 100을 2진수로 변환하는 코드이다.

n에는 변환하고자 하는 10진수 수를,

b자리에는 몇 진법으로 변환할 지 숫자를 넣으면 된다.

 

n의 값이 1만큼 작아질 때까지

n을 b로 나눈 나머지 값을 배열에 저장하고,

n을 b로 나눈 몫으로 갱신한다.

 

마지막 몫이 1이라면 그 값을 배열에 넣는다.

배열을 뒤집고, 각 값을 연속으로 출력하면 n진법 변환이 완성된다.

다만, 16진법은 알파벳을 사용하기에

그 부분을 적용하기 위해서는 10이상의 값은 알파벳으로 변환하는 과정이 필요하다. 

#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
    int n = 100;
    int b = 2;
    while(n > 1){
    	v.push_back(n % b);
        n /= b;
    }
    if(n == 1) v.push_back(1);
    reverse(v.begin(), v.end());
    for(int a : v){
    	if(a >= 10) cout << char(a + 55);
        else cout << a;
    }
    
	return 0;
}
728x90