Форум программистов, компьютерный форум CyberForum.ru

Как компактно отображать и хранить большие числа? - C++

Восстановить пароль Регистрация
 
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
25.07.2015, 11:48     Как компактно отображать и хранить большие числа? #1
Есть ли какой-нибудь общеупотребимый формат? Типа 3*(2^123456-1)

Сейчас развлекаюсь с числами Мерсенна. Для них просто придумал "М23", "М24"..
*таблица известных чисел Мерсенна http://primes.utm.edu/mersenne/index.html#known

Ну, и чтобы в программе можно было писать:
BigInt BigInt1 = BigInt::FromCompactString("3*(2^123456-1)");
String str = BigInt::GetCompactString(BigInt1);

Интересует формат, который годился бы для любого натурального числа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2015, 11:48     Как компактно отображать и хранить большие числа?
Посмотрите здесь:

Ввести с клавиатуры 10 чисел. Если среди них есть числа большие 15, заменить их на 15. Напечатать все полученные числа. C++
C++ упорядочить по возростанию числа большие 2
Большие числа C++
C++ Большие числа в C
C++ большие числа
C++ Ввести с клавиатуры 10 чисел. Если среди них есть числа, большие 15, заменить их на 15. Напечатать все полученные числа
Очень большие числа: узнать, есть ли остаток от деления одного числа на другое C++
Можно ли написать этот код более компактно? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.07.2015, 12:08     Как компактно отображать и хранить большие числа? #2
Длинное число заведомо содержит много информации, в компактном представлении её заведомо мало. Есть исключение: если дополнительная информация содержится в принадлежности к определённой последовательности, чем ограничено множество возможных значений, то сама запись может быть короткой, но тем не менее содержать всю информацию о числе. Но для абсолютно любого числа это не годится, так как оно может и не принадлежать заданной последовательности, а специально подгонять последовательность - надо описать её, а в описании должна быть недостающая информация о числе. Поэтому абсолютно любое можно только с некоторой ограниченной точностью. И вот для этого то есть отличное представление, вполне общепринятое: нотация с плавающей запятой. Но для гигантских чисел и она не компактна, так как и порядок тоже может иметь много знаков. Например, http://www.cyberforum.ru/cgi-bin/latex.cgi?2.414*10^{446545646994646448945454959595545454544878887421561231454684654564564868454154564564651564848454847847123156468768421234876142123} компактностью не страдает.
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
25.07.2015, 12:38  [ТС]     Как компактно отображать и хранить большие числа? #3
Сейчас всё отображается тот так:

D:\aProjects\TestBigInt\x64\Release>TestBigInt.exe -power M47
--- power() test ---
Generating Mersenn number M47 = power(2, 43112609) - 1
Generation complete:
M47 : 316470269 .... 697152511
M47 : число цифр = 12978189
M47 : число сегментов = 1442021
Exec time : 203.18 seconds.
***
*это внутреннее представление. Хотелось бы одной короткой строкой.

Добавлено через 29 минут
А может вычислить факториал, который поближе к числу?
Например:

>TestBigInt.exe -factorial 5
Calculating factorial: 5
Big integer : 120
number of decimal digits = 3
number of segments = 1
Exec time : 0 seconds.

Тогда число можно будет представить как факториал плюс остаток:
число 123 = "5!+3".
Yandex
Объявления
25.07.2015, 12:38     Как компактно отображать и хранить большие числа?
Ответ Создать тему
Опции темы

Текущее время: 17:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru