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 |