Как работать с большими числами в языке с++?

Пользователь

от fidel , в категории: C/C++ , год назад

Как работать с большими числами в языке с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от bart , год назад

@fidel 

В языке C++ можно работать с большими числами, которые выходят за пределы стандартных типов данных, с помощью библиотеки gmp (GNU Multiple Precision Arithmetic Library).


Чтобы использовать эту библиотеку, необходимо сначала установить ее на компьютер. Для этого можно скачать исходные файлы с официального сайта GMP (https://gmplib.org/), распаковать архив и следовать инструкциям в файле README для компиляции и установки библиотеки.


После установки gmp в свой проект можно включить соответствующие заголовочные файлы и использовать классы и функции из этой библиотеки.


Пример использования gmp:

 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
#include 
#include 

int main() {
    mpz_t num1, num2, sum;
    mpz_init(num1);
    mpz_init(num2);
    mpz_init(sum);

    // Присваивание значений
    mpz_set_str(num1, "1234567890123456789012345678901234567890", 10);
    mpz_set_str(num2, "9876543210987654321098765432109876543210", 10);

    // Сложение
    mpz_add(sum, num1, num2);

    // Вывод результата
    char* sum_str = mpz_get_str(nullptr, 10, sum);
    std::cout << "Сумма: " << sum_str << std::endl;

    // Освобождение памяти
    mpz_clear(num1);
    mpz_clear(num2);
    mpz_clear(sum);

    return 0;
}


В этом примере используется тип mpz_t из библиотеки gmp для работы с большими числами. Функции mpz_init и mpz_clear используются для инициализации и очистки числовых переменных. Функции mpz_set_str используются для установки значений чисел. Функция mpz_add используется для выполнения операции сложения. Функция mpz_get_str используется для конвертации числа в строку.


Таким образом, с помощью библиотеки gmp вы можете работать с большими числами в C++. Подробнее о возможностях и функциях этой библиотеки вы можете узнать из ее документации.

Пользователь

от amber_moore , 6 месяцев назад

@fidel 

Дополнительно к использованию библиотеки gmp, в C++ также есть другие подходы для работы с большими числами. Например, можно воспользоваться классами из стандартной библиотеки C++ (STL) - std::vector или std::string, чтобы хранить большие числа как последовательность цифр и выполнять операции с ними.


Вот пример, демонстрирующий сложение двух больших чисел с использованием std::vector:

 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
#include <iostream>
#include <vector>

std::vector<int> addLargeNumbers(const std::vector<int>& num1, const std::vector<int>& num2) {
    std::vector<int> sum;
    int carry = 0;

    int n = std::max(num1.size(), num2.size());
    for (int i = 0; i < n; ++i) {
        int digit1 = (i < num1.size()) ? num1[i] : 0;
        int digit2 = (i < num2.size()) ? num2[i] : 0;
        
        int current_sum = digit1 + digit2 + carry;
        sum.push_back(current_sum % 10);
        carry = current_sum / 10;
    }

    if (carry > 0) {
        sum.push_back(carry);
    }

    return sum;
}

int main() {
    std::vector<int> num1 = {9, 9, 9, 9}; // 9999
    std::vector<int> num2 = {8, 8, 8};    // 888

    std::vector<int> result = addLargeNumbers(num1, num2);

    // Вывод результата
    std::cout << "Сумма: ";
    for (int i = result.size() - 1; i >= 0; --i) {
        std::cout << result[i];
    }
    std::cout << std::endl;

    return 0;
}


Этот пример показывает, как можно сложить два больших числа, представленных в виде последовательности цифр, с использованием std::vector. Операция сложения производится поэлементно, начиная с младших разрядов и учитывая возможную переносимость.


Оба примера - использование библиотеки gmp и работа с std::vector или std::string имеют свои особенности и подходят для различных ситуаций. Выбор метода зависит от требований конкретной задачи и удобства использования.