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

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

10.06.2024, 22:33. Показов 5270. Ответов 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 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
11.06.2024, 14:27  [ТС]
Студворк — интернет-сервис помощи студентам
Donkix, не знаю. Возможно, компилятор слишком старый
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 14:28
Просмотрел все пути, которые ведут к cpp, закинул на всякий и туда

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

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

Тут если поменять компилятор, то будет норм, полагаю
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
11.06.2024, 14:48
========================
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
11.06.2024, 14:48  [ТС]
Наталья8, у меня нормально
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
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 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
11.06.2024, 14:52  [ТС]
Donkix, я перепроверю версию и позже напишу
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
11.06.2024, 14:53
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня нормально
Ну и дай бог, что бы у тебя всегда всё нормально было.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
11.06.2024, 14:54  [ТС]
Наталья8, у меня ежедневно в 2:00 форум глючит
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 15:13
Цитата Сообщение от Royal_X Посмотреть сообщение
Donkix, я перепроверю версию и позже напишу
Принято

Добавлено через 18 минут
Royal_X, поставил dev с твоей ссылки, стандарт поставил 23(он смог это принять), но от этого ничего не поменялось, с другими стандартами также...
Что-то мы делаем не правильно
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
11.06.2024, 15:17  [ТС]
Donkix, попробуй поставить компилятор посвежее. Смена стандарта тут не поможет
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru