본문 바로가기
Programming/Project Euler

30. 프로젝트 오일러 #30 : 각 자릿수의 5승의 합

by 작은별하나 2015. 3. 30.
반응형

이번문제는 각 자릿수를 5승해서 그 합이 자기 자신이 되는 가를 보는 것입니다.


문제 자체의 난이도는 그리 어렵지 않죠.


일단 5승을 계산하는 것은 반복된 작업이라서 배열을 이용해서 0~9까지의 5승을 구해서 적어놓았습니다.  이렇게 하니까 문제 자체가 깔끔해지네요.


시간도 상당히 적게 들고요.

또 고민했던 것이 얼마나 많은 숫자까지 연산할 것인가였죠.


9의 5승이 59049이니까요.  6자리 숫자(9라는 숫자가 2개만 있어도 6자리이니)까지 가능하겠죠.  좀 더 잘 짠다면, 반복연산하는 부분을 더 줄일 수 있을텐데요.


프로그램 첨부합니다.


프로그램은 참고용으로만 봐주세요.


#include <stdio.h>

int main()
{
    int sum = 0;
    const int v[10] = { 0, 1, 32, 243, 1024, 3125, 7776, 16807, 32768, 59049 };

    for( int i = 11 ; i <= 6*v[9]  ; i++ )
    {
        int q = i;
        int s = 0;
        while(q)
        {
            int r = q%10;
            s += v[r];
            q /= 10;
        }
        if( s == i )
        {
            sum += i;
            printf("%d\n", i);
        }
    }
    printf("Ans = %d\n", sum);
}


728x90

댓글