Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/50: Рейтинг темы: голосов - 50, средняя оценка - 4.60
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809

Посоветуйте функции для арифметики больших целых чисел

06.06.2024, 22:40. Показов 11497. Ответов 166
Метки нет (Все метки)

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

Пока что реализовал следующие функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
std::string Add(const std::string&, const std::string&);
std::string Subtract(const std::string&, const std::string&);
std::string Multiply(const std::string&, const std::string&);
std::string Divide(const std::string&, const std::string&);
std::string Remainder(const std::string&, const std::string&);
std::string Power(const std::string&, const int);
std::string Factorial(const int);
std::string GCD(const std::string&, const std::string&);
std::string LCM(const std::string&, const std::string&);
std::string Abs(const std::string&);
std::string ISqrt(const std::string&);
std::string Fibonacci(const int);
Все эти функции работают с очень большими числами.
Что еще можете посоветовать? Какие важные функции я упустил?
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2024, 22:40
Ответы с готовыми решениями:

Ограничения VBA в реализации арифметики длинных (больших) чисел
Итак, моя юбилейная - первая тема на этом форуме. Здравствуйте Товарищи! Необходима помощь или совет от спецов этого форума. Работаю над...

Быстрая сортировка массива целых чисел, с использованием указателей и адресной арифметики
# include <stdio.h> # include <stdlib.h> void QuickSort(int *a, int size){ int *left = a; // Адрес 1 элемента int *right...

Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел
Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел:...

166
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 14:39  [ТС]
Студворк — интернет-сервис помощи студентам
SmallEvil, смешно то, что вы к моей любительской либе ставите такие высокие требования, будто она будет использоваться в гасителях инерции межгалактических космических кораблей. Я уже привел пример, что такие проверки и требования отсутствуют даже в серьезном коммерческом софте. Мне кажется, что вы решили просто подъ**ать меня немного)))
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 14:39
да и я ничего не навязываю. Так, мысли и наблюдения высказываю
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
09.06.2024, 15:51
Royal_X, всех любителей претензий можно направлять по адресу Сложение и вычитание больших чисел.
Там вполне удастся и посмеяться вдоволь.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 16:57  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
всех любителей претензий можно направлять по адресу
да пусть выдвигают претензии, je m'en fous royalement Да и порой они говорят правильные вещи. Так что приходится фильтровать стёб в поисках хороших советов.

Добавил еще:
C++
1
2
3
4
5
6
BigInt& operator+=(const BigInt&);
BigInt& operator-=(const BigInt&);
BigInt& operator*=(const BigInt&);
BigInt& operator/=(const BigInt&);
BigInt& operator%=(const BigInt&);
BigInt& operator^=(const int);
Инкремент и декремент решил не добавлять, т.к. они абсолютно лишены смысла при работе с большими числами. Например, по этой же причине они отсутствуют в языке Python.
Да и можно писать а += "1" или a -= "1" или даже вместо "1" писать "-1".

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once
 
#include <iostream>
#include <string>
 
class BigInt
{
private:
    std::string value = "0";
    bool sign = false;
public:
    BigInt()=default;
    BigInt(const std::string&);
    BigInt(const char*);
 
    BigInt& operator=(const char*);
    BigInt& operator+=(const BigInt&);
    BigInt& operator-=(const BigInt&);
    BigInt& operator*=(const BigInt&);
    BigInt& operator/=(const BigInt&);
    BigInt& operator%=(const BigInt&);
    BigInt& operator^=(const int);
 
    const std::string& get_value() const;
    bool get_sign() const;
    
    friend std::ostream& operator<<(std::ostream&, const BigInt&);
 
    friend BigInt operator+(const BigInt&, const BigInt&);
    friend BigInt operator-(const BigInt&, const BigInt&);
    friend BigInt operator-(const BigInt&);
    friend BigInt operator*(const BigInt&, const BigInt&);
    friend BigInt operator/(const BigInt&, const BigInt&);
    friend BigInt operator%(const BigInt&, const BigInt&);
    friend BigInt operator^(const BigInt&, const int);
 
    friend bool operator>=(const BigInt&, const BigInt&);
    friend bool operator<=(const BigInt&, const BigInt&);
    friend bool operator==(const BigInt&, const BigInt&);
    friend bool operator!=(const BigInt&, const BigInt&);
    friend bool operator>(const BigInt&, const BigInt&);
    friend bool operator<(const BigInt&, const BigInt&);
    
    friend BigInt Abs(const BigInt&);
    friend BigInt Factorial(const int);
    friend BigInt GCD(const BigInt&, const BigInt&);
    friend BigInt LCM(const BigInt&, const BigInt&);
    friend BigInt ISqrt(const BigInt&);
    friend BigInt Fibonacci(const int);
};
 
inline BigInt Add(const BigInt& x, const BigInt& y){return x + y;}
inline BigInt Subtract(const BigInt& x, const BigInt& y){return x - y;}
inline BigInt Minus(const BigInt& x){return -x;}
inline BigInt Multiply(const BigInt& x, const BigInt& y){return x * y;}
inline BigInt Divide(const BigInt& x, const BigInt& y){return x / y;}
inline BigInt Remainder(const BigInt& x, const BigInt& y){return x % y;}
inline BigInt Pow(const BigInt& x, const int y){return x ^ y;}
 
inline bool EqualQ(const BigInt& x, const BigInt& y){return x == y;}
inline bool NotEqualQ(const BigInt& x, const BigInt& y){return x != y;}
inline bool GreaterQ(const BigInt& x, const BigInt& y){return x > y;}
inline bool LessQ(const BigInt& x, const BigInt& y){return x < y;}
inline bool GreaterEqualQ(const BigInt& x, const BigInt& y){return x >= y;}
inline bool LessEqualQ(const BigInt& x, const BigInt& y){return x <= y;}
 
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);
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 17:08
Royal_X, да не было стёба вроде.

Цитата Сообщение от Royal_X Посмотреть сообщение
Да и можно писать а += "1" или a -= "1" или даже вместо "1" писать "-1".
а тут мыслЯ такая возникла.
Ведь эти константы - они обычно небольшие, но их придётся вычислять в рантайме.
И мыслЯ заключается в том, что эти небольшие числа неплохо бы сделать constexpr.
Но чтобы не грузить тебя сейчас этим, на этом мыслЮ обрываю. Я её чисто для себя запомнил
Это навскидку тянет несколько глобальных перестроек (шаблон, итераторы по разрядам)

Добавлено через 1 минуту
с другой стороны, там особо много конструироваться то не будет, короткие числа лягут в SSO
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 17:16  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
можно ещё перемещающий вариант такого конструктора приделать
можно немного подробнее об этом? для каких он будет случаев? я вот прочел недавно статью, что с move нужно меньше играться, дескать это источник проблем
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 17:23
Royal_X, скажем, для случая, когда эта самая std::string была получена откуда-то, но после создания объекта BigInt нафиг не нужна. Тогда её эффективнее переместить внутрь, чем копировать
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 17:39  [ТС]
Алексей1153, хорошо. Попытаюсь найти в инете инфу, как это сделать
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 17:44
Royal_X, ничего сверхестественного

C++
1
2
3
4
5
6
7
8
9
BigInt(const std::string& s):value(s)
{
    //тут проверки для value
}
 
BigInt(std::string&& s):value(std::move(s))
{
    //тут проверки для value
}
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 17:47  [ТС]
Алексей1153, первый у меня уже есть
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 17:48
Royal_X, я для сравнения их и нарисовал оба
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 17:50  [ТС]
Алексей1153, а нельзя ли std::move передать в другой конструктор, чтобы не писать те же самые проверки?
Например, как в случае BigInt::BigInt(const char* s) : BigInt(std::string(s)) {}
0
фрилансер
 Аватар для Алексей1153
6506 / 5756 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 18:02
Цитата Сообщение от Алексей1153 Посмотреть сообщение
//тут проверки для value
это отделяется в функцию и всё
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 18:05  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
это отделяется в функцию и всё
я спрашивал чисто ради интереса, там всего несколько строк, ничего даже если будет повторяться
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.06.2024, 19:26
Цитата Сообщение от Royal_X Посмотреть сообщение
а нельзя ли std::move передать в другой конструктор, чтобы не писать те же самые проверки?
C++
1
2
3
4
5
6
7
BigInt(std::string s) : BigInt(std::move(s))
{ } // тут проверок нет 
 
BigInt(std::string&& s) : value(std::move(s))
{
    //тут проверки для value
}
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 19:42  [ТС]
DrOffset, и такой подход не ухудшит производительность?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.06.2024, 19:46
Цитата Сообщение от Royal_X Посмотреть сообщение
и такой подход не ухудшит производительность?
Для варианта копирования будет одно доп. перемещение, которое почти бесплатно. Я бы сказал, что не ухудшит, если не доказано обратное через тесты.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
09.06.2024, 19:49  [ТС]
DrOffset, я в коде напишу код проверки два раза. Не хочу даже функцию сделать. Там всего несколько строк. Но было интересно узнать, что так можно делать.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.06.2024, 19:50
Royal_X, я ни на чем не настаиваю.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
10.06.2024, 00:00
7 страниц, куча просмотров, содержания ноль.
Мда, красава топикстартер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2024, 00:00

Дан файл целых чисел. Подсчитать сумму чисел, больших числа N
program p1; var fx:text; s,k,n:real; c:integer; begin assign(fx,'C:\Users\Пользователь\Documents\аипас.txt'); reset (fx); ...

В массиве целых чисел подсчитать количество нечётных положительных чисел, больших 50
В массиве целых чисел подсчитать количество нечётных положительных чисел, больших 50. Вывести массив, сами числа и их количество. Если...

Найти сумму целых чисел положительных чисел, больших 20, меньших 100 и кратных 3
Найти сумму целых чисел положительных чисел, больших 20, меньших 100 и кратных 3.

Сравнить функции(рекурсивную и итерационную) по скорости выполнения для больших чисел
Вот мой код вычисления Факториала. а как посчитать время выполнения?Функции timeGetTime и GetTickCount и как их применить? ...

Для последовательности целых, оканчивающейся "8", определить число чисел, больших первого введенного числа
Помогите, пожалуйста, с заданием. Для последовательности целых чисел, оканчивающихся числом 8, определить количество чисел, больших...


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

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru