📜  检查乘法的整数溢出

📅  最后修改于: 2021-04-24 22:28:23             🧑  作者: Mango

给定两个整数a和b,找出它们的乘积(axb)是否超过有符号的64位整数。如果超出打印,则打印其他。

例子:

Input : a = 100, b = 200 
Output : No

Input : a = 10000000000,
        b = -10000000000
Output : Yes

方法 :

  1. 如果任何一个数字为0,则它将永远不会超出范围。
  2. 否则,如果两者之积除以一个等于另一个,则也将在范围内。
  3. 在任何其他情况下,都会发生溢出。
C++
// CPP program to check for integer
// overflow on multiplication
#include 
using namespace std;
  
// Function to check whether there is
// overflow in a * b or not. It returns
// true if there is overflow.
bool isOverflow(long long a, long long b)
{
    // Check if either of them is zero
    if (a == 0 || b == 0) 
        return false;
      
    long long result = a * b;
    if (a == result / b)
        return false;
    else
        return true;
}
  
// Driver code
int main()
{
    long long a = 10000000000, b = -10000000000;
    if (isOverflow(a, b))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}


Java
// Java program to check for integer
// overflow on multiplication
import java.util.*;
import java.lang.*;
  
public class GfG{
      
    // Function to check whether there is
    // overflow in a * b or not. It 
    // returns true if there is overflow.
    static Boolean isOverflow( long a, long b)
    {
        // Check if either of them is zero
        if (a == 0 || b == 0) 
            return false;
      
        long result = a * b;
        if (a == result / b)
            return false;
        else
            return true;
    }
      
    // driver function
    public static void main(String argc[])
    {
        long a = Long.parseLong("10000000000");
        long b = Long.parseLong("-10000000000"); 
          
        if (isOverflow(a, b))
        System.out.print("Yes");
    else
        System.out.print("No");
    }
}
  
// This code is contributed by Prerna Saini


Python3
# Python program to check for integer 
# overflow on multiplication 
  
# Function to check whether there is 
# overflow in a * b or not. It returns 
# true if there is overflow. 
def isOverflow(a, b): 
  
    # Check if either of them is zero 
    if (a == 0 or b == 0) :
        return False
  
    result = a * b
    if (result >= 9223372036854775807 or 
        result <= -9223372036854775808):
        result=0
    if (a == (result // b)):
        print(result // b)
        return False
    else:
        return True
  
# Driver code 
if __name__ =="__main__":
    a = 10000000000
    b = -10000000000
    if (isOverflow(a, b)):
        print( "Yes")
    else:
        print( "No")
          
# This code is contributed
# Shubham Singh(SHUBHAMSINGH10)


C#
// C# program to check for integer
// overflow on multiplication
using System;
  
public class GfG
{
      
    // Function to check whether there is
    // overflow in a * b or not. It 
    // returns true if there is overflow.
    static bool isOverflow( long a, long b)
    {
        // Check if either of them is zero
        if (a == 0 || b == 0) 
            return false;
      
        long result = a * b;
        if (a == result / b)
            return false;
        else
            return true;
    }
      
    // Driver function
    public static void Main()
    {
        long a = 10000000000;
        long b = -10000000000 ;
          
        if (isOverflow(a, b))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
// This code is contributed by vt_m


PHP


输出:

Yes

时间复杂度: O(1)