68 lines
1.1 KiB
C
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;
|
|
}
|