cleanup problem 40 C solution
This commit is contained in:
68
problem-40.c
68
problem-40.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user