Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601

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

10.06.2024, 22:33. Показов 5300. Ответов 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
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 15:33
Студворк — интернет-сервис помощи студентам
Наталья8, Я думаю, что стоит взять исходник у рояла и переписать под себя

Добавлено через 2 минуты
Royal_X,
Цитата Сообщение от Royal_X Посмотреть сообщение
попробуй поставить компилятор посвежее.
Знать бы еще, какой посвежее, нашел min gw 5.1.6, весь дебаг в новом деве на него поставил, а твой код не запускается
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 15:37  [ТС]
Donkix, тут можешь скачать крайнюю версию gcc + mingw https://winlibs.com/
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 15:39
В красном деве версия 6.3.0 TDM-gcc

Добавлено через 1 минуту
Royal_X, лечу проверять
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 15:41  [ТС]
Наталья8, намек понял. Я так понимаю, что многим не нравится, что данная тема висит в разделе С++. Я перенесу его в блог.
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
11.06.2024, 15:42
Цитата Сообщение от Donkix Посмотреть сообщение
не const char*, а char const*
Это одно и то же.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,290
11.06.2024, 15:54
Цитата Сообщение от Royal_X Посмотреть сообщение
Я так понимаю, что многим не нравится
Да не то чтобы. Мне всё равно.
Просто скорость разработки говорит о том,
что либо за тебя это целая контора разрабатывала.
Либо ты большой гений.
Либо это всё просто нае......
По любому я не стану это ковырять. Смысла нету...
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 16:06
Цитата Сообщение от Royal_X Посмотреть сообщение
тут можешь скачать крайнюю версию gcc + mingw https://winlibs.com/
поставил 14.1.0 win32, ничего не поменялось...

Добавлено через 27 секунд
Royal_X, укажи характеристики своего компилятора и проекта

Добавлено через 6 минут
Сделал еще на крайний случай, запустил напрямую через командную строку, даже так, ошибка не поменялось, но это я не использовал еще ключи

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Это одно и то же.
принял, спасибо
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 16:18  [ТС]
Donkix, у меня 64bit

Добавлено через 46 секунд
Donkix, я перенесу тему в блог и там подробно напишу, каким компилятором была сделана библиотека
Возможно добавлю ещё dll, def файлы, чтобы кто хочет создал себе lib. Либо, если не поленюсь, то в Visual Studio создам ещё lib.

Добавлено через 9 минут
Наталья8, 90% математических функций я написал за несколько часов. Потратил бы больше, если смотрел бы чужие коды. Но написал так, как я представлял сам. Остальные функции добавил постепенно. Большая часть времени ушла на ООП. Первоначально функции получали в качестве аргументов строки и возвращали строки. Но потом мне пришлось все переделать, создать класс. И на это потратил ещё два дня, т.к. я не особо силен в ООП. Но сам проект довольно простой.
1
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 16:35
Royal_X, принято, возможно из-за специфичных настроек твоей проги, оно у других не пашет
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 17:23  [ТС]
Donkix, посмотри в моем блоге особенности компиляции библиотеки


Предупреждение:
Дабы не нарушать покой раздела С++ для начинающих, перенес тему в блог: https://www.cyberforum.ru/blog... g8563.html

Больше отвечать в данной теме я не буду.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
11.06.2024, 17:35
Royal_X, вот там то народ будет толпами ошиваться

без исходников как тестировать - непонятно
0
11.06.2024, 17:41  [ТС]

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
без исходников как тестировать - непонятно
так ты хочешь буквы тестировать или программу. Есть библиотека, уж у тебя правильно ее подключить точно получится. Но вообще, никто ничего не обязан делать.

0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,340
11.06.2024, 18:03
Ексешник для тестирования (в папке bin)
Вложения
Тип файла: zip la.zip (14.40 Мб, 8 просмотров)
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 18:13
В общем версия дева, которую предложил роял + команда -lbigint к строке компоновщика в режиме 64-бит релиза заставили работать ее даже у меня.
Это успех
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 18:19  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
без исходников как тестировать - непонятно
ты же эксперт и тебе непонятно, как подключать библиотеку и тестировать
вот у Donkix даже получилось...
1
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 18:21
Royal_X, можешь заодно собрать либу для дебага?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
11.06.2024, 18:22  [ТС]
Цитата Сообщение от Donkix Посмотреть сообщение
можешь заодно собрать либу для дебага?
добавил файл в блоге
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
11.06.2024, 18:26
Royal_X, я не буду возиться с библиотеками, это лень. И вообще запускать IDE не хочется, я вот тут бы стал тестить https://www.onlinegdb.com/ , не выходя из браузера
0
11.06.2024, 18:32  [ТС]

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
я вот тут бы стал тестить
понимаю, запуск ide сложнее, чем тестировать... не CLion случайно?

0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 1
11.06.2024, 18:51
Royal_X, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2024, 18:51

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru