В общем есть кое-какая идея, почти сумасбродная и имеющая некий изврат,

но вполне работоспособная при правильном подходе. Изложу суть.
У нас INT_MAX = 2 147 483 647 (в числе 10 цифр и не больше). Используем несколько масивов
Код:

...
int array1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // Единицы
int array2[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90}; // Десятки
int array3[10] = {0, 100, 200, 300, 400, 500, 600, 700, 800, 900}; // Сотни
int array4[10] = {0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000}; // Тысячи
int array5[10] = {0, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000}; // Десятки тысяч
int array6[10] = {0, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000}; // Сотни тысяч
int array7[10] = {0, 1000000, 2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000}; // Миллион
int array8[10] = {0, 10000000, 20000000, 30000000, 40000000, 50000000, 60000000, 70000000, 80000000, 90000000}; // Десятки миллионов
int array9[10] = {0, 100000000}; // Сотни миллионов. Потому что в значении 2 147 483 647. Максимальное.
int array10[10] = {0, 100000000, 200000000}; // Миллиард. Потому что в значении 2 147 483 647. Максимальное.
int array_rand[size] = {0}; // Массив куда будем записывать числа (от INT_MIN до INT_MAX)
int index1,
index2,
index3,
index4,
index5,
index6,
index7,
index8,
index9,
index10,
SumNumber;
Далее используем генерацию случайных чисел от '0' до '9'
Код:

#include <stdlib.h>
#include <ctime.h>
using std::time;
...
srand(time(0));
for(int i = 0; i < size; i++){
index1 = rand() % 9; // Значения от '0' до '9' Всего 10 значений. Для индекса массива.
index2 = rand() % 9;
index3 = rand() % 9;
index4 = rand() % 9;
index5 = rand() % 9;
index6 = rand() % 9;
index7 = rand() % 9;
index8 = rand() % 9;
index9 = rand() % 1;
index10 = rand() % 2;
...
// Проверяем, чтобы 2 147 483 647 не вышел за диапазон значения
if(index10 == 2){
// Проверяем, чтобы 2 147 483 647 не вышел за диапазон значения.
if(index9 == 1){
// Выполняем суммирование только для этих случаев
SumNumber = array10[index10] + array9[index9] + array8[index8] ... + ... array2[index2] + array1[index1];
}
}
....
// В итоге и правильном алгоритме, мы получаем
SumNumber = array10[index10] + array9[index9] + array8[index8] ... + ... array2[index2] + array1[index1];
array_rand[i] = SumNumber;
}
А чтобы отрицательное получить, ну, ещё один рандом прикрутить, с диапазоном значений от '0' до '1', если ноль - значит выполняем положительные числа, если единица - ставим к полученому числу - "—". Будет отрицательное.
В тех местах где я выделил зелёным цветом, слегка запутался, так как в числе 2
147 483 647, может быть и так - 2
047 483 647. Но пока ничего не могу придумать.
