본문 바로가기
Programming/BOJ

[C/C++] 백준 #1740 거듭제곱(수학)

by 작은별하나 2022. 10. 6.
반응형

이번문제는 3진수를 생각하면 됩니다.  단지 0과 1로만 이루어진 3진수가 되는 것이죠.

 

예를 들어서 5번째로 작은 거듭제곱수는 5가 이진수로 101이므로

 

\[ 101_{(3)} = 3^2 + 3^0 = 10 \]

 

이 됩니다.

 

2's power number

 

마찬가지로 10은 \(1010_{(2)}\) 이므로

\[ 1010_{(3)} = 3^3 + 3^1 = 30 \]

이 됩니다.

 

제가 작성한 소스입니다.  소스는 참고용으로 봐주세요.

//------------------------------------------------
//  baekjoon #1740
//      - by Edan
//      - created at 2019-07-02
//------------------------------------------------
#include <stdio.h>

//  500,000,000,000 < 2^39
//  3^39 < 2^62
int main()
{
    long long n, sum = 0, s = 1;
    scanf("%lld", &n);
    while(n)
    {
        if(n & 1)
        {
            sum += s;
        }
        s *= 3;
        n >>= 1;
    }
    printf("%lld\n", sum);
    return 0;
}
728x90

댓글