82 lines
2.6 KiB
C
82 lines
2.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
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;
|
|
}
|