Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


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

У нас 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. Но пока ничего не могу придумать.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 01-06-2009 в 13:10. Причина: Чуть исправил, но всё равно запутался...

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:49, 30-05-2009 | #5