본문 바로가기
Programming/Project Euler

13. 프로젝트 오일러 #13 : BigInt 수의 합 구하기

by 작은별하나 2014. 12. 30.
반응형

사실 이번 문제는 꼼수로 푸는 것이 맞을 듯 합니다.

BigInt 라이브러리를 이용해서 풀어도 되겠지만, 그렇게 하면 시간이 많이 걸리죠.


앞자리부터 10자리 숫자만 구하면 되는 것이니까요.  그렇게 하면 int형으로는 위험할지 몰라도 int64형으로는 충분한 자릿수가 됩니다.  32비트 자료형은 10의 9승정도를 표현할 수 있으니까요.  64비트는 10의 19승까지 표현할 수 있죠.


여기에 소스만 올리도록 할께요.  특별하게 설명할 일은 없는 듯 합니다.



#include <stdio.h>

int main()
{
        char *s = "37107287533902102798797998220837590246510135740250"
                "46376937677490009712648124896970078050417018260538"

                // 데이터 생략

                "53503534226472524250874054075591789781264330331690";
                int64_t u = 0;

                for( int i = 0 ; i < 100 ; i++ )
                {
                        int64_t c = 0;
                        char *p = s+i*50;
                        for( int j = 0 ; j < 11 ; j++ )
                        {
                                c *= 10;
                                c += *(p+j) - '0';
                        }
                        u += c;
                }

                int len = 0;
                int64_t v = 1;
                while( u/v ) len++, v *= 10;
                u /= v/10000000000;
                printf("Ans = %jd\n", u);
}
728x90

댓글