2019-09-19 12:20:53 +02:00

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;
}