在C++中增加大数字(近 100.000 位)
Incrementing big numbers (nearly 100.000 digits) in C++
如何在C++?..中存储大量近100000位数字
我尝试使用long long int
和long 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 结构)。它具有整数、有理数和浮点支持。
如果你感到非常勇敢,你可以实现一个长数字作为单个整数的链表。为了增加或加、减、乘和除这些数字,最好创建一个类并使用运算符重载。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组