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

时间:2016-10-13 13:50:35

标签: c++ integer largenumber

前几天我正在解决一个乘法编程问题,其中被乘数(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。

1 个答案:

答案 0 :(得分:0)

解决方案可能是