【发布时间】:2012-10-30 23:58:48
【问题描述】:
这是一个两部分的问题。
-
我有一个添加数字的小代码;然而,这些数字的增长速度往往超过
long long的承受能力。所以我想我会创建一个类来移动它。
我的思维过程给出了3
long long a, b, c;,将所有内容添加到
c,当c已满时,将b加一并将c设置为零;一旦b为“满”,将a加一并将b和c设置为零,依此类推。所以,我必须先检查
c是否已满容量,然后再重置它,然后将其添加到b等等!有没有办法检查?
谁能指出我创建自己的数据类型的正确方向。从视觉上看,我像上面一样将 3 个
long longs 放在一起,数据类型将完成我上面所说的。
最后,我想像对待整数一样对待我的新数据类型:
int a = 0;
我希望能够做到
我的数据类型 a = 0;
英语不是我的母语。
【问题讨论】:
-
还可以看看GMP等库中的BigInteger
-
您最好的选择是使用不是最大可能大小的类型。换句话说,如果您有两个表示大整数的字节数组,则一次取它们 16 位,并使用 32 位类型执行您的数学运算。很容易检查 32 位结果是否不适合 16 位整数,因此溢出处理很容易。
-
让我们看看:如果您以 1 GHz 或每秒 1e9 的速度创建数字并运行您的程序 100 年,那么您将生成大约 3e18 个数字,给予或接受。 64 位“signed long long”的范围是 9e18。因此,要超出范围,您要么有更快的计数器/生成器,要么有多个并行运行的数字生成器,或者你的数字有跳跃。