#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#include <math.h>
double random_double() {
static int initialized = 0;
if (!initialized) {
srand(time(0));
initialized = 1;
}
return (double) rand() / RAND_MAX;
}
int random_int(int min, int max) {
return floor(min + (max - min + 1) * random_double());
}
int num_length(int number) {
char sign = number < 0;
number = abs(number);
if (number >= 1000000000) return sign + 10;
if (number >= 100000000) return sign + 9;
if (number >= 10000000) return sign + 8;
if (number >= 1000000) return sign + 7;
if (number >= 100000) return sign + 6;
if (number >= 10000) return sign + 5;
if (number >= 1000) return sign + 4;
if (number >= 100) return sign + 3;
if (number >= 10) return sign + 2;
return sign + 1;
}
void print_array(int* array, int length) {
for (int i = 0; i < length; i++) {
printf("%d, ", array[i]);
}
}
char* to_string(int* array, int length) {
size_t size = 0;
for (int i = 0; i < length; i++) {
size += (num_length(array[i]) + (i < length - 1 ? 2 : 1)) * sizeof(char);
}
char* string = malloc(size);
char* ptr = string;
for (int i = 0; i < length; i++) {
sprintf(ptr, "%i%s", array[i], i < length - 1 ? ", " : "");
ptr += num_length(array[i]) + (i < length - 1 ? 2 : 1);
}
return string;
}
double* random_double_array(int length) {
double* array = malloc(length * sizeof(double));
for (int i = 0; i < length; ++i) {
array[i] = random_double();
}
return array;
}
int* random_int_array(int length, int min, int max) {
int* array = malloc(length * sizeof(int));
for (int i = 0; i < length; ++i) {
array[i] = random_int(min, max);
}
return array;
}
int main(void) {
const int size = 5;
int* array = random_int_array(size, -10, 10);
char* stringifyed = to_string(array, size);
printf("%s\n", to_string(array, size));
free(stringifyed);
return 0;
}