如何在C ++中存储大量近10万个数字?..
我尝试过使用long long int
和long double int
..没有什么对我有用..
有没有其他方法存储这么大的数字?
我希望找到比给定的巨大数字大的最小回文。
答案 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)
如果你感到非常勇敢,你可以实现一个长数作为单个整数的链表。因此,您可以增加或者添加,减去,乘以和除以这些数字,最好创建一个类并使用运算符重载。