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

Incrementing big numbers (nearly 100.000 digits) in C++

本文关键字:数字 C++ 增加      更新时间:2023-10-16

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

我尝试使用long long intlong double int..对我没有任何用处..

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

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

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

是的,您可以在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";

编辑

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

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

OpenSSL提供了这样的库,但有时可能很难使用。从API的角度来看,Matt McCutchen的库似乎要友好得多。

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

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