diff --git a/problem-40.c b/problem-40.c index b8ba013..b88a780 100644 --- a/problem-40.c +++ b/problem-40.c @@ -1,19 +1,24 @@ -#include #include +#include #include + #define MAX_NUM 1000000 -char* LETTERS = "0123456789"; - -int digits(int* res, int num) +int split_digits(int* digits, int num) { int len = 0; while (num > 0) { len++; - res = (int*)realloc(res, len * sizeof(int)); - res[len-1] = num % 10; + + 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; } @@ -23,43 +28,38 @@ int digits(int* res, int num) int main(int argc, char** argv) { - char* str; - int* digs; - int nums, j, result; - int digit = 0, i = 0, num = 1; + int* digits; + int len; + int digit = 0, i = 0; + int prod = 1, num = 1; - str = malloc(MAX_NUM * sizeof(int)); - digs = malloc(0 * sizeof(int)); - nums = digits(digs, num); + digits = malloc(0 * sizeof(int)); + if (digits == NULL) { + printf("A memory error occurred.\n"); + exit(1); + } + + len = split_digits(digits, num); while (digit < MAX_NUM) { - str[digit] = digs[nums-1-i]; + 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 == nums) { - /* refill digs and reset i */ + if (i == len) { + /* refill digits and reset i */ num++; - nums = digits(digs, num); i = 0; - /* DEBUG - printf("num = %d str = ", num); - for (j=0; j