Обработка больших количеств в C++?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

19
задан herohuyongtao 24 December 2013 в 04:38
поделиться

7 ответов

Вы ищете, как выполнить операции на больших исходных данных, которые Вы получаете? Существует большой целочисленный C++ библиотека (подобный Java), который позволяет Вам выполнять арифметические операции...

6
ответ дан 30 November 2019 в 03:08
поделиться

Это кажется на поиск способа ввести номера Произвольной точности. вот две библиотеки, которыми Вы могли пользоваться: GMP и MAPM

15
ответ дан 30 November 2019 в 03:08
поделиться

принятие Вас говорит о вводе чисел, двойная точность получила бы Вас до 1,7976931348623157 x 10^308

3
ответ дан 30 November 2019 в 03:08
поделиться

Если Вы хотите заставить свой собственный код для цели попытаться использовать строки для хранения больших чисел... можно затем создать основную операцию в секунду как + - / * на них..., например -

#include <iostream>

using namespace std;

string add (string &s1, string &s2){
    int carry=0,sum,i;

    string  min=s1,
    max=s2,
    result = "";

    if (s1.length()>s2.length()){
        max = s1;
        min = s2;
    } else {
        max = s2;
        min = s1;
    }

    for (i = min.length()-1; i>=0; i--){
        sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';

        carry = sum/10;
        sum %=10;

        result = (char)(sum + '0') + result;
    }

    i = max.length() - min.length()-1;

    while (i>=0){
        sum = max[i] + carry - '0';
        carry = sum/10;
        sum%=10;

        result = (char)(sum + '0') + result;
        i--;
    }

    if (carry!=0){
        result = (char)(carry + '0') + result;
    }       

    return result;
}

int main (){
    string a,b;

    cin >> a >> b;

    cout << add (a,b)<<endl;

    return 0;
}
5
ответ дан 30 November 2019 в 03:08
поделиться

Вы могли бы хотеть взглянуть к gmplib, библиотека обработки числа произвольной точности для C и C++

3
ответ дан 30 November 2019 в 03:08
поделиться

Если Вы хотите, чтобы это было точно, Вам нужна библиотека, заставленная иметь дело с большими числами. Java имеет BigInt, который всегда будет точен, неважно, к какому количеству цифр Вы хотите взять его, и обеспечивает математические операции на них. Весь исходный код включен, Вы могли передать его, но это действительно не вид вещи, в которой C++ является лучшим - я использовал бы основанный на JVM язык и пользовался бы одной из библиотек Big.

я не думаю, что использовал бы рубин для этого, если Вы не хотели, чтобы он был медленным, и я предполагаю, что, так как Вы говорите о C++, скорость является своего рода конструктивным соображением.

3
ответ дан 30 November 2019 в 03:08
поделиться

Как другие уже указали, существуют различные библиотеки сверхбольшого числа/произвольной точности в C++, который Вы, вероятно, нашли бы полезным. Если скорость не необходима, у меня создается впечатление что Python и Lisp оба сверхбольших числа использования по умолчанию.

2
ответ дан 30 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: