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

C++ 在c+中乘以非常大的整数时避免溢出+;,c++,integer,largenumber,C++,Integer,Largenumber,前几天我在解决一个乘法编程问题,其中被乘数(a1,a2,…an)可以是1解决方案可以是 使用已解决的更宽整数(128+): 使用浮点实数,在这种情况下,您会失去准确性以换取灵活性 “仍然没有公认的解决方案”-如果您用错误的语言标记了您的问题,该怎么办?c++?是的,我是用c++做的。如果超出范围,你希望它做什么?考虑到它超出范围是不可能的,你应该避免那种你无论如何都可以避免的情况。你需要执行一个不会溢出的操作,而不是a*2。我会说a+a,加上一些修改后的a值。我没有回答这个问题。如果将两个“大

前几天我在解决一个乘法编程问题,其中被乘数(a1,a2,…an)可以是1解决方案可以是

  • 使用已解决的更宽整数(128+):
  • 使用浮点实数,在这种情况下,您会失去准确性以换取灵活性

“仍然没有公认的解决方案”-如果您用错误的语言标记了您的问题,该怎么办?c++?是的,我是用c++做的。如果超出范围,你希望它做什么?考虑到它超出范围是不可能的,你应该避免那种你无论如何都可以避免的情况。你需要执行一个不会溢出的操作,而不是
a*2
。我会说
a+a
,加上一些修改后的
a
值。我没有回答这个问题。如果将两个“大”整数相乘,而它们的乘积实际上超过了类型(int或long),如何避免它?
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);
}