#include #include #include int main(int argc, char **argv) { char string[] = "73167176531330624919225119674426574742355349" "19493496983520312774506326239578318016984801" "86947885184385861560789112949495459501737958" "33195285320880551112540698747158523863050715" "69329096329522744304355766896648950445244523" "16173185640309871112172238311362229893423380" "30813533627661428280644448664523874930358907" "29629049156044077239071381051585930796086670" "17242712188399879790879227492190169972088809" "37766572733300105336788122023542180975125454" "05947522435258490771167055601360483958644670" "63244157221553975369781797784617406495514929" "08625693219784686224828397224137565705605749" "02614079729686524145351004748216637048440319" "98900088952434506585412275886668811642717147" "99244429282308634656748139191231628245861786" "64583591245665294765456828489128831426076900" "42242190226710556263211111093705442175069416" "58960408071984038509624554443629812309878799" "27244284909188845801561660979191338754992005" "24063689912560717606058861164671094050775410" "02256983155200055935729725716362695618826704" "28252483600823257530420752963450"; char cur, out; long int max = 0, tmp = 1; int i, j; double elapsed; struct timespec start, end; clock_gettime(CLOCK_MONOTONIC, &start); for(i = 0; i < 1000; i++) { if(i < 13) { cur = string[i] - '0'; tmp *= (long int)cur; } else { if(tmp > max) { max = tmp; } out = string[i-13] - '0'; if(out == 0) { tmp = 1; for(j = i - 12; j <= i; j++) { cur = string[j] - '0'; tmp *= (long int)cur; } } else { cur = string[i] - '0'; tmp /= (long int)out; tmp *= (long int)cur; } } } clock_gettime(CLOCK_MONOTONIC, &end); elapsed = (end.tv_sec - start.tv_sec) + (double)(end.tv_nsec - start.tv_nsec) / 1000000000; printf("Project Euler, Problem 8\n"); printf("Answer: %ld\n", max); printf("Elapsed time: %.9lf seconds\n", elapsed); return 0; }