Files
project-euler/problem-40.c
2019-02-11 01:11:50 -05:00

68 lines
1.1 KiB
C

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NUM 1000000
int split_digits(int* digits, int num)
{
int len = 0;
free(digits);
digits = malloc(1 * sizeof(int));
while (num > 0) {
len++;
digits = (int*)realloc(digits, len * sizeof(int));
if (digits == NULL) {
printf("A memory error occurred.\n");
exit(1);
}
digits[len-1] = num % 10;
num /= 10;
}
return len;
}
int main(int argc, char** argv)
{
int* digits;
int len;
int digit = 0, i = 0;
int prod = 1, num = 1;
digits = malloc(1 * sizeof(int));
if (digits == NULL) {
printf("A memory error occurred.\n");
exit(1);
}
len = split_digits(digits, num);
while (digit < MAX_NUM) {
if (digit == 0 || digit == 9 || digit == 99 || digit == 999
|| digit == 9999 || digit == 99999 || digit == 999999)
/* Need to step through the array backward */
prod *= digits[len-1-i];
digit++;
i++;
if (i == len) {
/* refill digits and reset i */
num++;
i = 0;
len = split_digits(digits, num);
}
}
printf("The solution is %d\n", prod);
free(digits);
return 0;
}