C++ 上的整数溢出以及如何添加大数字

integer overflow on c++ and how to add big numbers

本文关键字:添加 数字 何添加 整数 溢出 C++      更新时间:2023-10-16

我正在编写一个包含非常大数字的问题。我在如何处理整数溢出方面遇到问题。当我添加多个大数字时,我得到一个负数。我该如何处理?我的数据类型也是

    unsigned long long p=0;

我该怎么做才能保持正值并继续添加?

有很多方法可以做到这一点。您可以使用boost的多精度库,该库可以存储128位变量。

如果您不想安装其他库,则始终可以在数组中表示变量,其中每个元素都是变量的一个数字。

如果你不介意失去一些精度,你可以使用像双精度(或长双精度)这样的东西,它可以容纳任意大的数字。由于您使用的是长长,听起来保持完美准确性的唯一选择是使用实现这一点的库或自己编写一个,其中较大的数字必须保存在另一个表示这些较大数字的长长中,并且数学运算必须考虑存储大于长长的值。

来自 hiranmay_ghosh@yahoo.com

使用随机数字编写长数生成器。然后生成一个 120 位和 135 位 inpu。

用输入 = 数字 1 和数字 2

从长数字 1 和 2 写一个数字加法器函数。并从上次执行最后一次执行。

现在从每个输入中读取一个数字并将其传递给上面的函数,直到所有数字完成。从数字加法器生成的串联总和数字。

这是最简单但不高效的算法

来自 hiranmay_ghosh@yahoo.com

您可以利用数据类型 int。这可以处理任何 9 位数字。

现在编写一个 int 加法器函数。然后一次从输入和执行的其余部分读取 9 位数字

进位将为 0 或 1。如果 s> 9,则设置 Carry =1,其中 s=n1+n2+c1

我们可以使用完全非数值的方法。只需将所有数字视为符号即可。

案例 $n 1 in0) 案例 $n 2 in0) 案例 $c 1 in0) s=0;c=0;;1) s=1;c=0;;埃萨克;;1) 案例 $c 1 in0) s=1;c=0;;1) s=2;c=0;;埃萨克;;2) 三xxx3) xxxx4) xxxx5) xxxx6) xxxx7) xxxx8) 案例 $c 1 in0) s=8;c=0;;1) s=9;c=0;;埃萨克;;9) 案例 $c 1 in0) s=9;c=0;;1) s=0;c=1;;埃萨克;;埃萨克;;1) 案例 $n 2 in0) 案例 $c 1 inxxxxxxxx

虽然该函数的这段代码超过 400 行,但每个循环只会执行 5-6 行代码。我建议测量此代码的性能。

请随时联系以获取更多详细信息。