Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569

bigint библиотека для работы с большими целыми числами на С++

10.06.2024, 22:33. Показов 5249. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал библиотеку для работы с большими целыми числами на С++.
Учитывая, что я почти не тестировал все функции, то буду рад, если протестируете и найдете баги.

Основы работы с библиотекой:
Библиотека предлагает два класса BigInt для представления больших чисел и BigFrac для работы с большими обыкновенными дробями.

Примеры ввода, инициализации, объявления больших чисел (разумеется, ниже приведены не все возможные способы, а лишь некоторые):
C++
1
2
3
4
5
6
7
8
9
10
BigInt a; // 0
BigInt b("5");
BigInt c{"-4");
BigInt d = "12";
BigInt e = b;
BigInt f(c);
BigInt g{d};
g = e;
std::string s = "10";
BigInt h{s};
и дробей
C++
1
2
3
4
5
6
BigFrac a; // 0/1
BigFrac b{"2", "3"};
BigFrac c("4", "5");
BigInt d{"-7"};
BigInt e{"9"};
BigFrac f{d, e};
У BigInt есть методы для получения доступа к знаку и значению, которое хранится в виде строки:
C++
1
2
const std::string& get_value() const;
bool get_sign() const;
А у BigFrac для получения доступа к числителю и делителю:
C++
1
2
const BigInt& get_numerator() const;
const BigInt& get_denominator() const;
Чтобы вывести дробь или число можно напрямую писать:

C++
1
std::cout << BigInt("42");
или
C++
1
std::cout << Factorial(100);
или
C++
1
std::cout << BigFrac("1", "3");
Т.е. ostream перегружен, ну вы поняли...

Реализованные функции:

сложение, вычитание, знак минус, умножение, деление, остаток, возведение в степень
можно использовать также операторы +, -, *, /, %, ^, либо с присваиванием += -= *= /= %= ^=
Примечание: Remainder это именно остаток от деления на основе floored definition и отличается от % языка С++ на основе truncated definition. Данная функция больше напоминает на те, что в математических пакетах (Maple, Mathematica, Maxima...).

C++
1
2
3
4
5
6
7
Add(const BigInt& x, const BigInt& y) 
BigInt Subtract(const BigInt& x, const BigInt& y)
BigInt Minus(const BigInt& x)
BigInt Multiply(const BigInt& x, const BigInt& y)
BigInt Divide(const BigInt& x, const BigInt& y)
BigInt Remainder(const BigInt& x, const BigInt& y)
BigInt Pow(const BigInt& x, const int y)
Сравнение чисел (можно также использовать операторы < > <= >= == !=)
C++
1
2
3
4
5
6
bool EqualQ(const BigInt& x, const BigInt& y)
bool NotEqualQ(const BigInt& x, const BigInt& y)
bool GreaterQ(const BigInt& x, const BigInt& y)
bool LessQ(const BigInt& x, const BigInt& y)
bool GreaterEqualQ(const BigInt& x, const BigInt& y)
bool LessEqualQ(const BigInt& x, const BigInt& y)
Другие функции. Мне кажется нет смысла объяснять их предназначение. Если будут вопросы, то пишите в комментариях.
C++
1
2
3
4
5
6
7
8
9
10
11
BigInt Abs(const BigInt&);
BigInt Factorial(const int);
BigInt GCD(const BigInt&, const BigInt&);
BigInt LCM(const BigInt&, const BigInt&);
BigInt ISqrt(const BigInt&);
BigInt Fibonacci(const int);
BigInt Binomial(const int, const int);
bool EvenQ(const BigInt&);
bool OddQ(const BigInt&);
std::size_t IntegerLength(const BigInt&);
std::string Approx(const BigInt&, const std::size_t = 10ull)
Последняя функция Approx позволяет вывести большое число в научной нотации (мантисса и экспонента). Добавил ее, т.к. подумал, что она будет полезна некоторым. Причем, опционально можно выбрать сколько цифр показывать.

Функции для дробей (можно так же использовать операторы):

C++
1
2
3
4
5
6
BigFrac Add(const BigFrac& x, const BigFrac& y)
BigFrac Subtract(const BigFrac& x, const BigFrac& y)
BigFrac Minus(const BigFrac& x)
BigFrac Multiply(const BigFrac& x, const BigFrac& y)
BigFrac Divide(const BigFrac& x, const BigFrac& y)
BigFrac Pow(const BigFrac& x, const int y)
Сравнение дробей
C++
1
2
3
4
5
6
bool EqualQ(const BigFrac& x, const BigFrac& y)
bool NotEqualQ(const BigFrac& x, const BigFrac& y)
bool GreaterQ(const BigFrac& x, const BigFrac& y)
bool LessQ(const BigFrac& x, const BigFrac& y)
bool GreaterEqualQ(const BigFrac& x, const BigFrac& y)
bool LessEqualQ(const BigFrac& x, const BigFrac& y)
Другие функции
C++
1
2
3
BigFrac Abs(const BigFrac&);
BigFrac Harmonic(const int);
std::string Approx(const BigFrac&);
Для дробей тоже добавил Approx, которая показывает значение дроби в научной нотации.

P.S. Спасибо форумчанам DrOffset, TheCalligrapher, Алексей1153 и другим, которые помогли советами...
Вложения
Тип файла: zip bigint.zip (30.2 Кб, 26 просмотров)
3
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2024, 22:33
Ответы с готовыми решениями:

Библиотека для работы с большими целыми числами
Кто то может подскажет, есть ли к Pure библиотека для работы с большими целыми числами (более 64 бит)? Не хочется изобретать велосипед....

Калькулятор для работы с большими целыми числами
Длинные целые числа. Описать класс для представления длинных целых чисел. Реализовать методы задания числа, распечатки, сложения с...

Библиотека для работы с большими числами
Доброго времени суток, комрады! Для работы с большими числами есть библиотека GMP.h. Скачал архив по ссылке https://gmplib.org/. Далее...

69
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:27  [ТС]
Студворк — интернет-сервис помощи студентам
Donkix, не знаю. Возможно, компилятор слишком старый
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:28
Просмотрел все пути, которые ведут к cpp, закинул на всякий и туда

Добавлено через 1 минуту
Также меня смущает сам коментарий ошибки, не const char*, а char const*
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:30  [ТС]
Donkix, я создавал файл с помощью gcc крайней версии
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:32
Royal_X, а можно ли пересобрать эту либу под 11 стандарт?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:36  [ТС]
Donkix, мне кажется код работает, начиная с С++14. Но это нужно проверить. У меня было выставлено С++23, но я ничего из новых версий не использовал.
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:38
Royal_X, если с 14, то тогда я в пролете, dev поддерживает только 11 стандарт...

Добавлено через 1 минуту
Попробую его обновить
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:39  [ТС]
Donkix, встроенный компилятор в dev точно старый. Но мне кажется там можно ставить хоть крайнюю версию gcc + mingw.
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:44
Royal_X, если поменять ссылки на стороний компилятор, то думаю вполне, остается лишь вопрос, пропустит ли dev стандарты выше тех, что в него встроены
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:46  [ТС]
Donkix, вроде есть dev с красной иконкой, он поновее будет
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.06.2024, 14:46
-----------------------------------------------------
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:48  [ТС]
Donkix, вот этот вроде https://sourceforge.net/projec... ro-devcpp/

Тут если поменять компилятор, то будет норм, полагаю
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.06.2024, 14:48
========================
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:48  [ТС]
Наталья8, у меня нормально
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:52
Royal_X, поменял стандарт на 14 через --std=c++14, но ничего не изменилось

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
Donkix, вот этот вроде https://sourceforge.net/projec... ro-devcpp/
попробую
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:52  [ТС]
Donkix, я перепроверю версию и позже напишу
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.06.2024, 14:53
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня нормально
Ну и дай бог, что бы у тебя всегда всё нормально было.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 14:54  [ТС]
Наталья8, у меня ежедневно в 2:00 форум глючит
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 15:13
Цитата Сообщение от Royal_X Посмотреть сообщение
Donkix, я перепроверю версию и позже напишу
Принято

Добавлено через 18 минут
Royal_X, поставил dev с твоей ссылки, стандарт поставил 23(он смог это принять), но от этого ничего не поменялось, с другими стандартами также...
Что-то мы делаем не правильно
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
11.06.2024, 15:17  [ТС]
Donkix, попробуй поставить компилятор посвежее. Смена стандарта тут не поможет
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.06.2024, 15:22
Donkix,
Пиши уже свою библиотеку.
Дня за три осилишь?
Героем форума станешь....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2024, 15:22

разработать класс реализующий методы для работы с большими целыми числами
разработать класс реализующий методы для работы с большими целыми числами (умножение, сложение, вычитание) Добавлено через 3 минуты ...

MIRACL библиотека для работы с большими числами
У меня была готовая программа с консолью и ее исходники. Когда я переписывал ее под программу с формой появилась проблема. Дело в том, что...

Библиотека для работы с большими числами, возможность факторизации
Привет всем! Какие библиотеки можете посоветовать для работы с большими числами, с возможностью их факторизации. Хотелось бы иметь...

Разработать структуру “bigint” для выполнения операций с целыми числами содержащими произвольное количество знаков
Нужна помощь с си! Это срочно, у меня получилось сделать часть, но дальше не получается. Пожалуйста, помогите. Я надеюсь , что здесь...

Разработать тип данных “bigint” для выполнения операций с целыми числами содержащими произвольное количество знаков
Разработать собственный тип данных (структуру) “bigint” для выполнения операций с целыми числами содержащими произвольное количество...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru