4

如何在 C++ 中存储大量近 100000 位数字?..

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

有没有其他方法可以存储如此庞大的数字?

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

4

4 回答 4

6

在评论部分进一步澄清后:

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

在这里,您可以找到递增表示为字符串的数字的代码:

#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";
}

您可以在循环中使用它来增加您的大数字并检查结果字符串是否为回文

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";

编辑

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

于 2013-10-24T06:44:35.500 回答
3

您正在寻找“bignum”或“biginteger”库。

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

于 2013-10-24T03:28:57.657 回答
2

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

于 2013-10-24T06:36:30.733 回答
-1

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

于 2013-10-24T06:51:42.333 回答