반응형
사실 이번 문제는 꼼수로 푸는 것이 맞을 듯 합니다.
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
'Programming > Project Euler' 카테고리의 다른 글
프로젝트 오일러 #15 격자 경로의 수 구하기 (0) | 2014.12.31 |
---|---|
14. 프로젝트 오일러 #14 : 최대 체인을 가지는 우박수 구하기 (0) | 2014.12.30 |
12. 프로젝트 오일러 #12 : 500개 초과 삼각수 구하기 (0) | 2014.12.29 |
#11 : 그리드에서 가장 큰 곱수 구하기(Brute Force) (0) | 2014.12.28 |
10. 프로젝트 오일러 #10 : 2백만 이하의 소수의 합 구하기 (0) | 2014.12.24 |
댓글