c++中的整数溢出及如何添加大数字

3lxsmp7m  于 2023-01-15  发布在  其他
关注(0)|答案(4)|浏览(205)

我正在编写一个包含非常大的数字的问题。我遇到了一个关于如何处理整数溢出的问题。当我将多个大数字相加时,我得到了一个负数。我该如何处理这个问题?另外,我的数据类型是

unsigned long long p=0;

我该怎么做才能让它保持正值并继续增加呢?

fcy6dtqo

fcy6dtqo1#

有很多方法可以做到这一点。你可以使用boost's multi-precision library,它可以存储128位的变量。
如果你不想安装其他库,你可以用一个数组来表示你的变量,其中每个元素都是你变量的一个数字。

hrysbysz

hrysbysz2#

如果您不介意损失一些精度,可以使用类似于double的参数(或long double),它可以保存任意大的数字。由于您使用的是long long,听起来您保持完美准确性的唯一选择是要么使用实现此功能的库,要么自己编写一个库,其中较大的数字必须保存在另一个long long中,该long表示那些较大的数字,并且数学运算必须考虑存储大于long long的值。

f0ofjuux

f0ofjuux3#

来自www.example.comhiranmay_ghosh@yahoo.com
编写一个使用随机数的长数字生成器。然后生成一个120位和135位的输入。
写一个数字加法器函数,输入=数字1和数字2,从长数1和2开始。从最后一次执行开始进位。
现在从每个输入读取一个数字,并将其传递给上述函数,直到所有数字完成。连接和数字,以从数字加法器的结果。
这是最简单但效率不高的算法

jobtbby3

jobtbby34#

来自www.example.comhiranmay_ghosh@yahoo.com
你可以利用int数据类型,它可以处理任何9位数。
现在写一个整型加法器函数,然后从输入端一次读取9位数,剩下的执行
进位将为0或1。如果s〉9,则设置进位= 1,其中s = n1 + n2 + c1
我们可以使用一种完全非数值的方法,把所有的数字当作一个符号。
情况$n1在0)情况$n2在0)情况$c1在0)s = 0;c = 0; 1)s = 1;c = 0;; esac;; 1)0中的情况$c1)s = 1;c = 0; 1)s = 2;c = 0;; esac;; 2)xxxx 3)xxxx 4)xxxx 5)xxxx 6)xxxx 7)xxxx 8)0中的情况$c1)s = 8;c = 0; 1)s = 9;c = 0;; esac;; 9)情况$c1在0中)s = 9;c = 0; 1)s = 0;c = 1;; esac;; 1)0中的案例$n2)Xxxxxxxx中的案例$c1
虽然这个函数的代码超过400行,但每个周期只会执行5 - 6行代码。我建议测量一下这个代码的性能。
请随时联系以了解更多详情。

相关问题