cleanup problem 40 C solution

This commit is contained in:
kevin
2019-02-10 19:44:30 -05:00
parent 82ba21af0d
commit 67adedf4ad

View File

@@ -1,19 +1,24 @@
#include<stdlib.h>
#include<stdio.h> #include<stdio.h>
#include<stdlib.h>
#include<string.h> #include<string.h>
#define MAX_NUM 1000000 #define MAX_NUM 1000000
char* LETTERS = "0123456789";
int split_digits(int* digits, int num)
int digits(int* res, int num)
{ {
int len = 0; int len = 0;
while (num > 0) { while (num > 0) {
len++; 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; num /= 10;
} }
@@ -23,43 +28,38 @@ int digits(int* res, int num)
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
char* str; int* digits;
int* digs; int len;
int nums, j, result; int digit = 0, i = 0;
int digit = 0, i = 0, num = 1; int prod = 1, num = 1;
str = malloc(MAX_NUM * sizeof(int)); digits = malloc(0 * sizeof(int));
digs = malloc(0 * sizeof(int)); if (digits == NULL) {
nums = digits(digs, num); printf("A memory error occurred.\n");
exit(1);
}
len = split_digits(digits, num);
while (digit < MAX_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++; digit++;
i++; i++;
if (i == nums) { if (i == len) {
/* refill digs and reset i */ /* refill digits and reset i */
num++; num++;
nums = digits(digs, num);
i = 0; i = 0;
/* DEBUG
printf("num = %d str = ", num); memset(digits, 0, len * sizeof(int));
for (j=0; j<digit; j++) len = split_digits(digits, num);
printf("%d", str[j]);
printf("\n");
*/
} }
} }
result = str[0] * printf("The solution is %d\n", prod);
str[9] * free(digits);
str[99] *
str[999] *
str[9999] *
str[99999] *
str[999999];
printf("The result is %d\n", result);
return 0; return 0;
} }