【发布时间】:2015-04-17 03:02:12
【问题描述】:
在我问这个问题之前我做了一些搜索。我尝试使用unsigned int,然后使用strtoul 将字符串转换为unsigned int。
甚至像
unsigned int num = 99999999999999999999999999999999999999999999999999999999999999999999999999999999
此代码仍然无法正常工作。我希望能够做这样的事情:
unsigned int num = 99999999999999999999999999999999999999999999999999999999999999999999999999999999;
unsigned int num2 = 1;
unsigned int ans = num + num2;
我希望能够做这样的事情:
string num1 = "99999999999999999999999999999999999999999999999999999999999999999999999999999999;"
string num2 = "1"
string conv_ans;
unsigned int conv1 = strtoul(num1);
unsigned int conv2 = strtoul(num2);
unsigned int ans = conv1 + conv2;
conv_ans = ans;
谢谢!
【问题讨论】:
-
所以您正在寻找 C++ 中的大整数库?
unsigned int可以容纳的最高值通常是 4294967295 或 18446744073709551615,因此无法将 9999999999999999999999999999999999999999999... 存储在unsigned int中。 -
无论你的代码体操如何,int 永远不会*存储那么大的数字。 msdn.microsoft.com/en-us/library/s3f49ktz.aspx
-
@user4799188:即使是 64 位 CPU 也没有足够大的寄存器来在单个操作中处理如此大的数字,因此数学运算必须由软件从几个较小的步骤合成,并且相当大慢点。大多数语言的主要算术支持仅限于其硬件可以全速执行的操作,但 C++ 有库(例如GMP)允许您使用任意大的数字。 (关于 Python,我可以说的几件好事之一:它开箱即用地支持这一点,但它在所有事情上都很慢,为什么要关心这个......)
-
或者,使用
double(或者甚至long double,如果你的编译器提供它) - 尽管在最低有效数字中会有一些舍入错误。 -
@element11:
s/16 bits/often 32 bits/
标签: c++ string int long-integer