在C ++中增加大数(近100.000位)

时间:2013-10-24 03:24:34

标签: c++

如何在C ++中存储大量近10万个数字?..

我尝试过使用long long intlong double int ..没有什么对我有用..

有没有其他方法存储这么大的数字?

我希望找到比给定的巨大数字大的最小回文。

4 个答案:

答案 0 :(得分:4)

在评论部分进一步澄清:

是的,您可以在C ++中将您的号码表示为std :: string。

Here您找到用于递增表示为字符串的数字的代码:

#include <string>
#include <iostream>
#include <ostream>

void increment_numerical_string(std::string& s)
{
    std::string::reverse_iterator iter = s.rbegin(), end = s.rend();
    int carry = 1;
    while (carry && iter != end)
    {
        int value = (*iter - '0') + carry;
        carry = (value / 10);
        *iter = '0' + (value % 10);
        ++iter;
    }
    if (carry)
        s.insert(0, "1");
}

int main()
{
    std::string big_number = "123456789012345678901234567899";
    std::cout << "before increment: " << big_number << "\n";
    increment_numerical_string(big_number);
    std::cout << "after increment:  " << big_number << "\n";
}

您可以在循环中使用此功能来增加您的大号和check if the resulting string is a palindrome

if( equal(s.begin(), s.begin() + s.size()/2, s.rbegin()) )
    std::cout << "is a palindrome.\n";
else
    std::cout << "is NOT a palindrome.\n";

修改

我并不认为这是解决问题的有效和正确的方法。它只是大数字的表示和递增方法。

答案 1 :(得分:3)

您正在寻找'bignum'或'biginteger'库。

OpenSSL提供了这样一个库,但有时很难使用。从API的角度来看,Matt McCutchen's library似乎更友好。

答案 2 :(得分:2)

GNU MP Bignum Library是一个很好的解决方案。它主要是一个C库,但有一个有效的C ++包装器(在需要时可以轻松访问底层的C结构)。它具有整数,有理数和浮点支持。

答案 3 :(得分:-1)

如果你感到非常勇敢,你可以实现一个长数作为单个整数的链表。因此,您可以增加或者添加,减去,乘以和除以这些数字,最好创建一个类并使用运算符重载。