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

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

10.06.2024, 22:33. Показов 4983. Ответов 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
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
11.06.2024, 05:37
Royal_X, файл libbigint.a в папке лишний. Забыл приложить cpp

Добавлено через 1 час 35 минут
тут аноним написал отзыв :
я папробавал вашу библиотеку но ничиво не палучается вот сами посматрити пишит нипанятную ошибку
https://onlinegdb.com/1o_FgLSbd
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,280
11.06.2024, 06:38
У меня есть длинная арифметика, сложение, вычитание, умножение, деление, квадратный корень. До 10000 знаков. Могу скинуть ексешник для тестирования.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 07:11  [ТС]

Не по теме:

alexu_007, ну так создай отдельную тему и выложи экзешник.


Алексей1153, анонимы могут заняться реверс-инжинирингом
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
11.06.2024, 07:31
Royal_X, суть не в этом. В данном коде BigInt.cpp даже не нужен, ошибка появляется из-за заголовка
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 07:55  [ТС]
Алексей1153, какая ещё ошибка? Не нужно подключать сомнительные заголовки с дублирующими именами, и не будет никаких ошибок. Очевидно же, что две inline функции с идентичными именами не могут сосуществовать. Убери свою MySuperPuperBiblioteka.h и все будет ок.
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
11.06.2024, 08:03
Royal_X, почему же они сомнительные? Они написаны этим анонимом и используются уже 5 лет, например
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 08:05  [ТС]
Алексей1153, ну пусть и дальше пользуется. Кстати, по такой логике в его заголовке тоже ошибка))
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
11.06.2024, 08:15
Royal_X, но ведь он пытается новую "сомнительную" библиотеку юзать. А у тебя есть возможность такой конфликт не допустить, но ты эту возможность не использовал
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 08:20  [ТС]
Алексей1153, ну если исправить этот конфликт, то потом можно симулировать другой. Например, чтобы не делал Microsoft, я могу написать говно хидер, который будет конфликтовать с WinAPI. И что думаешь, они будут что-то у себя исправлять, если я расскажу, что их WinAPI не работает с каким-то говно-хидером?
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
11.06.2024, 08:50
Royal_X, конечно же они не будут исправлять, тем более, что у них C, и выбора особо там нет. Так и никто не будет
0
Модератор
Эксперт Java
 Аватар для alecss131
2862 / 1368 / 409
Регистрация: 11.08.2017
Сообщений: 4,389
Записей в блоге: 2
11.06.2024, 13:21
Цитата Сообщение от Алексей1153 Посмотреть сообщение
файл libbigint.a в папке лишний. Забыл приложить cpp
Что за дискриминация по компиляторному признаку? Почему поддержка только гнутых? Даешь нормальные компиляторы
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 13:46  [ТС]
alecss131, чем тебе не нравится .a файл?
0
Модератор
Эксперт Java
 Аватар для alecss131
2862 / 1368 / 409
Регистрация: 11.08.2017
Сообщений: 4,389
Записей в блоге: 2
11.06.2024, 13:50
Royal_X, тем что у меня нету компилятора который может его съесть. только dll и lib файлы нормальные
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 14:05  [ТС]
alecss131, нормальный компилятор как раз принимает и dll, и lib и даже a. Скорее линкер. Я так понимаю у тебя яблоко, только яблочники считают всё вокруг отстоем, кроме яблока. Ни на Windows, ни на Linux с этим файлом проблем не будет. Возможно, и на macos, но там я не знаю.

Добавлено через 13 минут
alecss131, напиши, что у тебя за ОС и компилятор
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:21
Ну...
Компилятор MinGW64, точной версии не скажу, приложение Dev-Cpp
Миниатюры
bigint библиотека для работы с большими целыми числами на С++  
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:22
Просто объявить класс нет проблем, но с параметром не хочет...
0
 Аватар для Наталья8
617 / 375 / 67
Регистрация: 09.03.2016
Сообщений: 4,031
11.06.2024, 14:22
final_file (2).mp4
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2920 / 1046
Регистрация: 01.06.2021
Сообщений: 10,817
11.06.2024, 14:22  [ТС]
Donkix, у тебя должно работать. Ты уверен, что правильно подключил библиотеку?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 14:23
Файл .h закинул в include
файл .a в lib и lib32
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2024, 14:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru