如何在C ++中以整数存储10 ^ 6位数?
我需要在数据类型中保存10个以上的6位数字,我可以对其进行操作。我已经尝试了很长的int但当然失败了,因为它只有64位。
答案 0 :(得分:3)
答案 1 :(得分:2)
多长时间可以保持9223372036854775807
如果您想执行太多大型数值运算或存储值,请使用GMP。
答案 2 :(得分:2)
原来是“XY problem”;真正的问题是:
我正在大学学习c ++,所以我试图解决一些问题以增加我的知识,所以一个问题是测试得到一个数字,将其洗牌直到我得到一个可被7整除的数字。可能得到的是至少4位数,最大值是10 ^ 6位。
我的问题是随机地随机播放几次,直到我得到可被7整除的数字,例如,如果他给我12个i打印21.所以我必须将它存储在字符串中以便将其洗牌然后我尝试将其传递给Integer检查它是否可以被7整除,如果没有,我会再次洗牌等等。
这个问题更容易;它基本上实现了一位数除数的十进制长除法。天真的方法非常简单:
bool DivisibleBySeven(const char *str)
{
int remainder=0;
for(;*str;++str)
remainder=(remainder*10+(*str-'0')) % 7;
return remainder==0;
}
这肯定可以增强性能(例如,转换较大的数字簇以执行较少的分割),但这是基本的想法 - 顺便说一句,你将如何使用铅笔和纸张执行此操作。
请注意,在这种情况下,使用二进制bignum库可能不会给你带来任何好处,因为大多数时候会浪费从字符串表示转换(你需要有效地执行数字shuffle)和内部二进制表示。
答案 3 :(得分:0)
使用或写一个大整数库。 SO不是要求或指向任何特定图书馆的地方,但如果您选择了一个选项(特定图书馆或自己编辑)并且有特定问题,我们随时为您提供帮助。
答案 4 :(得分:0)
您可以使用BigIntegerLibrary.h
标头文件并计算非常大的值。
您可以参考此链接获取帮助 BigInt Library