Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 곱셈 시 정수 오버플로 확인

<시간/>

두 개의 숫자 A와 B를 곱한 결과를 찾고 싶다고 가정해 봅시다. 곱한 값이 64비트 정수를 초과하는지 확인해야 합니다. 100에 200을 곱하면 넘지 않고, 10000000000에 -10000000000을 곱하면 넘친다.

이를 확인하려면 몇 가지 단계를 수행해야 합니다. 다음과 같습니다 -

단계 -

  • 숫자 중 하나가 0이면 초과하지 않습니다.

  • 그렇지 않고 2의 곱을 1로 나눈 값이 다른 1과 같으면 초과하지 않습니다.

  • 다른 경우에는 초과합니다.

예시

#include <iostream>
#include <cmath>
using namespace std;
bool isMulOverflow(long long A, long long B) {
   if (A == 0 || B == 0)
      return false;
   long long result = A * B;
   if (A == result / B)
      return false;
   else
      return true;
}
int main() {
   long long a = 10000000000 , b = -10000000000;
   if(isMulOverflow(a, b)){
      cout <<"It will overflow";
   }
   else{
      cout <<"It will not overflow";
   }
}

출력

It will overflow