在c++中乘非常大的整数时避免溢出

avoiding overflow while multiplying very large integer in c++

本文关键字:整数 溢出 c++ 非常      更新时间:2023-10-16

前几天我正在解决一个乘法编程问题,其中乘法数(a1,a2,…an)可以是1<= ai <= 10^9。因此,我的问题是如何将这些数字相乘,使它们在c++中始终保持在(长长)范围内。

我应该使用任何一种mod(如10^9+7),但在问题中没有提到是否使用它?

我使用普通乘法(带/不带mod 10^9+7)只是为了无效。我也试了试俄罗斯农民乘法 mod 10^9+7

long long mulmod(long long a, long long b)
{
    long long res = 0; // Initialize result
    a = a % mod;
    while (b > 0)
    {
        // If b is odd, add 'a' to result
        if (b % 2 == 1)
            res = (res + a) % mod;
        // Multiply 'a' with 2
        a = (a * 2) % mod;
        // Divide b by 2
        b /= 2;
    }
    // Return result
    return (res % mod);
}

仍无可接受的解决方案。: - (

编辑1:ll to long long。

解决方案可以是

  • 使用更宽的整数(128+),这已经解决了:表示c
  • 中的128位数字
  • 使用浮点实数,在这种情况下,你会失去精度,以换取灵活性。