개발/알고리즘

11576_Base Conversion

송디 2020. 11. 27. 12:50

A진법을 10진법으로 바꾸고, 10진법을 B진법으로 바꾸어 해결하는 문제이다. 나같은 경우 조건이 A진법의 자릿수가 25이하라는 것을 보고 당연히 10진법으로 바꾸지 않고 해결하는 방법이 있는 줄 알았으나 문제 말미에 "A진법으로 나타낸 수를 10진법으로 변환하였을 때의 값은 양의 정수이며 220보다 작다." 이라는 말이 있었다. 그래서 그냥 일반적인 진법 변환 코드를 만들어 해결해주었다. 

1
2
3
4
5
6
void convertDecToB(int n, int base){
    if(n == 0)
        return;
    convertDecToB(n / base, base);
    cout << n % base << " ";
}
cs

나는 보통 나눗셈을 배열에 넣고 거꾸로 하거나, 아님 벡터로 reverse를 해주었는데, 이런 재귀 방식으로 나눗셈을 하는 것이 제일 깔끔한 것 같다. 

 

1
2
3
4
5
6
7
8
9
10
11
int main(void){
    int a, b, len, val, num;
 
    cin >> a >> b >> len;
    num = 0;
    for(int i = 0; i < len; i++){
        cin >> val; num = num * a + val;
    }
    convertDecToB(num, b);
}
 
cs

여기서 num = num * a + val 을 사용하면 모든 진법의 수를 십진법으로 변환이 가능하다. 

예를 들어 17진법의 수 2 16 이 있다고 치자. 

그렇다면 2 * 17^1 + 16 * 17^0  = 50 이런식으로 계산이 된다. 

여기서 num은 총합 a는 진법 val 그 자리수의 값을 나타낸다. 

차례대로 해보면

0 = 0 * 17 + 2  = 2

2 = 2 * 17 + 16 = 50 

num = 50

이렇게 되는 것이다. 

 

 

728x90

'개발 > 알고리즘' 카테고리의 다른 글

1107_리모컨  (0) 2020.11.29
11724_연결요소의 개수  (0) 2020.11.27
6588_골드바흐의 추측  (0) 2020.11.26
1373_이진수팔진수  (0) 2020.11.21
2745_진법변환  (0) 2020.11.18