C ++ создает новый массив чисел

Полный нуб здесь.
Пробую это в C ++.
Я пытаюсь создать массив чисел, которые имеют любую базу.
То есть я хочу определить новую базу и иметь этот массив «count» в новой базе.
Например: база 78.
Я хочу создать массив, скажем, из 3-х 78-значных чисел таким образом, чтобы при добавлении к первой «цифре» он переполнялся до второй, когда достигал 78.
что-то вроде [1] [1] [77] + 1 = [1] [2] [0] …

Это возможно эффективным способом? Могу ли я сделать это, скажем, 20 длинных массивов base-10000? Или время вычислений убьет меня?

Благодарю.

0

Решение

Попробуйте что-то вроде

class counter_array {
public:
static const int LEN = 20;
static const int base = 5;

counter_array operator+=(int inc) {
arr[0] += inc;
for (int i = 1; i < LEN; ++i) {
int old = arr[i];
arr[i] += arr[i-1] / base;
arr[i-1] %= base;
if (arr[i] == old) {
break;
}
}
}

private:
int arr[len];
};

Я не делал никаких отладок, но вы должны получить дрейф.

0

Другие решения

Внутренне (по крайней мере, на всех современных машинах и на всех машинах
которые поддерживают C или C ++), целые значения являются двоичными. Другой
базы используются только для ввода и вывода. Внутренние операции,
как и подсчет, являются «независимыми от базы» в том смысле, что они
зависит от стоимости и того, как она представлена.

Вопрос в том, long long (минимум 64 бита) большой
довольно. Если это так, вам нужно только предоставить процедуры преобразования для
Это. (strtoll поддерживает базы до 36, но нет
соответствующая процедура вывода.) Если нет, вам нужно реализовать
больший интегральный тип, используя алгоритмы Кнута для
четыре основных оператора. И вам нужно будет предоставить конверсию
процедуры для ввода и вывода (которые легко, когда у вас есть
четыре основные операции).

Вы можете, конечно, использовать любую базу для реализации своего
более длинный цельный тип; традиционно, база 2 ^ n, где n является
доступный машинный размер слова, использовался, для эффективности
причины, но ничто не мешает вам использовать базу 10000,
или любая основа, которая будет соответствовать одному из машинных слов. Ваш
числа просто потребуют больше памяти (и, следовательно, больше времени);
алгоритмы те же (те, что в Кнуте).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector