2023년 11월 26일 일요일

C++(Algorithm) - 3진수 뒤집기

 


10진수를 3진수로 만들고 이를 반전시키고 다시 10진수로 되돌리면 된다.


먼저 코드로는 이렇게 짰다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
 
int solution(int num1) {
    int answer = num1;
    int ary[20];
 
    int i = 0;
    while (answer > 1)
    {  
        ary[i] =answer % 3;
        answer /= 3;
 
        i++;
    }
 
    ary[i] = answer;
    answer = 0;
 
 
    for (int j = 0; j <= i; j++)
    {
        answer += ary[j] * pow(3, i - j);
    }
 
    
    return answer;
}
 
void main()
{
    int num = 100000000;
    printf("%d, %d\n", num, solution(num));
}
cs

1억을 넣었을 때 초과되지 않도록 배열 길이는 20으로 해두었다.
Vector를 사용하는 것도 좋지만 다시 반환하기 귀찮아서 그냥 배열로 했다.
뒤집는 기능도 구현 할 필요없이 배열을 큐처럼 사용하여 바로 리턴하면 된다.






예로 45를 입력했을 경우 13번줄 코드에서 배열에 이런식으로 저장되는데
이를 다시 빼와서 3^n 만큼 곱해주면 된다.

댓글 없음:

댓글 쓰기

c++ thread.h

 c++에서 쓰레드 돌릴려면 thread.h 헤더를 쓰면 되는데 이 친구는 쓰레드가 아직 실행 중인지, 아니면 강제 종료하거나 하는 함수가 없어서 조금 아쉬운 애다. std::thread 는 로컬 변수로 선언하든 new 동적 할당을 하든 start 함...