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

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

06.06.2024, 22:40. Показов 11518. Ответов 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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 13:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
это не нравится IntelliSense, выделяет красным строки перегрузки операторов
Кажется это какие-то баги внутри самого IntelliSense.

Цитата Сообщение от Royal_X Посмотреть сообщение
но этот подход кажется неправильным.
В текущем сценарии использования - правильный. Для чисто friend-объявления ADL не сработает, т.к. код расчитывает на неявное преобразование строки в BigInt. Так что для этого внешнее объявление в любом случае нужно, чтобы работало без ADL. А вот наличие самого friend под вопросом, если нет необъодимости доступа к полям класса. Можно же просто inline функции рядом разместить - будет то же самое, но без friend. Это выглядит разумным, раз уже ADL все равно не используется.
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 14:48
Цитата Сообщение от Royal_X Посмотреть сообщение
кстати, я в посте 52 делал правильно, типа нужно еще объявлять вне класса
нет, не нужно

покажи пример, что не вызывается ? Желательно ссылкой с https://www.onlinegdb.com/ , например

Цитата Сообщение от Royal_X Посмотреть сообщение
какой смысл от friend
доступ к приватным полям и удобное расположение кода глобальной функции в программе. Плюс возможность заинлайнить

Цитата Сообщение от Royal_X Посмотреть сообщение
но это не нравится IntelliSense
его можно выключить
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 14:58  [ТС]
DrOffset, friend изначально был для того, чтобы получить доступ к закрытым полям класса, учитывая, что функции находились вне класса.
Но Алексей в посте 53 спросил, мол зачем я функции вытащил наружу и посоветовал код, в котором они были внутри класса. Однако он friend оставил. Кажется, мне доступ для записи к закрытым полям класса BigInt не нужен. Я пишу сейчас класс BigFrac и я обращаюсь к этим закрытым полям класса BigInt через геттер. Например, чтобы валидировать дробь мне нужно проверить значение nan входных параметров типа BigInt, а также value второго аргумента на наличие "0".

Насколько я понимаю, мои friend функции даже сейчас inline. Т.е. если я уберу friend и вместо этого явно пропишу перед именем inline, то я смогу в главной функции вызвать математические функции напрямую, без BigInt:: ?

Добавлено через 4 минуты
Алексей1153, когда математические функции не объявляю второй раз за пределами класса, то в главной функции они не вызываются вообще, ни просто Add(), ни даже через BigInt::Add. Компилятор пишет, что такой функции в области видимости просто нет. Т.е., арифметические операции работают только перегруженными операторами.
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 15:05
Royal_X, мой ваиант - когда складываются два значения типа BigInt

а ты строки передаёшь. Откуда компилятор может угадать, в кого конвертировать эти строки?

Только при явном указании типа:

либо
Add(BigInt{"1"},BigInt{"2"});

либо (в случае статики)
BigInt::Add("1","2");

Добавлено через 1 минуту
и только из-за того, что приходится явно указывать тип BigInt я бы не стал усложнять код лишними конструкторами и функциями. Наоборот, мне бы даже больше это подошло. Неявные преобразования не всегда читаемы
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:06  [ТС]
Алексей1153, вот, проверь на простом примере

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
class BigInt
{
    int value;
public:
    BigInt()= default;
    BigInt(int x) : value(x){}
    friend BigInt Add(BigInt& a, const BigInt& b)
    {
        return BigInt(a.value + b.value);
    }
};
 
int main() 
{
    Add(4, 6);
}
Я получаю такую же ошибку. Строки ни при чем
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 15:07
Royal_X, выше уже есть объяснение.
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:13  [ТС]
Алексей1153, строки ни при чем. Даже если передаю объекты BigInt, все равно ошибка. Компилятор не видит функцию Add

Добавлено через 2 минуты
А так уже ошибки нет. Тут уже двойное объявление

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class BigInt
{
    int value;
public:
    BigInt()= default;
    BigInt(int x) : value(x){}
    friend BigInt Add(const BigInt& a, const BigInt& b)
    {
        return BigInt(a.value + b.value);
    }
};
 
BigInt Add(const BigInt&, const BigInt&);
 
int main() 
{
    Add(4, 6);
}
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 15:15
Royal_X, а так есть
https://onlinegdb.com/Bq8RBHRRw
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:28  [ТС]
[Алексей1153, я не понимаю, к чему этот код. Он не похож на мой. У меня Add возвращает только и только BigInt. Выше я уже привел пример с ошибкой, а также показал, как ошибка исчезает при двойном объявлении.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 15:30
Цитата Сообщение от Royal_X Посмотреть сообщение
Даже если передаю объекты BigInt, все равно ошибка. Компилятор не видит функцию Add
Неа. Если в friend, объявленный в классе BigInt (и больше нигде), передавать объект BigInt, то ошибки не будет.
А вот если нужна конвертация при передаче, то будет, потому что ADL уже не работает.
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:32  [ТС]
DrOffset, зачем я делал конструкторы для строки, если буду только BigInt передавать? Чтобы поставить в рамку и восхищаться? Очевидно же, что я буду передавать все, что и задумывалось передать
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 15:34
Цитата Сообщение от Royal_X Посмотреть сообщение
Он не похож на мой
само собой. Ведь это прилетело из другого заголовка. Раз десять, в разных вариантах

возвращаемое значение тут неважно
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 15:35
Цитата Сообщение от Royal_X Посмотреть сообщение
зачем я делал конструкторы для строки, если буду только BigInt передавать? Чтобы поставить в рамку и восхищаться? Очевидно же, что я буду передавать все, что и задумывалось передать
Прекрати.
Я тебе просто рассказываю как работают механизмы, которыми ты пользуешься, чтобы была осознанность в применении.

А по поводу этого я ж сразу написал,
Цитата Сообщение от DrOffset Посмотреть сообщение
А вот наличие самого friend под вопросом, если нет необъодимости доступа к полям класса. Можно же просто inline функции рядом разместить - будет то же самое, но без friend. Это выглядит разумным, раз уже ADL все равно не используется.
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:37  [ТС]
DrOffset, ну так вы написали, что я правильно сделал с этим двойным объявлением. А вот Алексей1153 говорит обратное.

Добавлено через 46 секунд
DrOffset, т.е. убрать friend и прописать вместо него inline?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 15:39
Цитата Сообщение от Royal_X Посмотреть сообщение
ну так вы написали, что я правильно сделал с этим двойным объявлением.
Да. Я написал, что если оставлять friend, то ты сделал правильно. Потому что у тебя код не расчитан на использование ADL, тебе везде нужны неявные преобразования.

Добавлено через 51 секунду
Цитата Сообщение от Royal_X Посмотреть сообщение
т.е. убрать friend и прописать вместо него inline?
Да, толка от friend для тебя нет. Ты не пользуешься ни дружбой, ни ADL в своем коде.
Так нафига этот friend тогда, просто для красоты?
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:44  [ТС]
DrOffset, приду домой, попробую

Добавлено через 3 минуты
DrOffset, если убрать friend и добавить вместо него inline, то убрать двойные объявления за пределами класса?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 15:45
Т.е. я говорю о том, что вот этот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class BigInt
{
    int value;
public:
    BigInt()= default;
    BigInt(int x) : value(x){}
    friend BigInt Add(const BigInt& a, const BigInt& b) // тут Add неявно inline
    {
        return BigInt(a.value + b.value);
    }
};
 
BigInt Add(const BigInt&, const BigInt&);
лучше переписать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class BigInt
{
    int value;
public:
    BigInt()= default;
    BigInt(int x) : value(x){}
 
    BigInt operator+(const BigInt& b) const // или внешний оператор, в данном случае речь не об этом
    {
        return value + b.value;
    }
};
 
// Тут Add явно inline
inline BigInt Add(const BigInt& a, const BigInt& b)
{
    return a + b;
}
0
Заблокирован
Эксперт функциональных языков программированияЭксперт С++
08.06.2024, 15:46  [ТС]
DrOffset, у меня не все функции имеют перегруженные операторы, нужно без них. Перегрузка перегрузкой, но нужно, чтобы все функции и без этого работали
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
08.06.2024, 15:48
PS.
"Лучше", с учетом контекста применения автором этого кода и всей темы, а не "вообще лучше". А то понабегут сейчас поправляльщики

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня не все функции имеют перегруженные операторы, нужно без них
Ну где нет перегрузки, там прямо в теле функции напиши. Возможно для некоторых нужно будет оставить friend, если им нужны внутренние части класса, но точно не для всех подряд.
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
08.06.2024, 15:50
Royal_X, только учитывай, что это будет рано или поздно
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Ведь это прилетело из другого заголовка. Раз десять, в разных вариантах
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2024, 15:50

Дан файл целых чисел. Подсчитать сумму чисел, больших числа 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, определить количество чисел, больших...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru