Kiểm tra nhân hai số A, B có tràn 64-bit integer hay không. Ví dụ 100×200 không tràn, 10000000000 × -10000000000 sẽ tràn.
Cách kiểm tra: nếu A=0 hoặc B=0 → không tràn. Ngược lại tính result = A*B, nếu A == result/B → không tràn, ngược lại tràn.
Ví dụ
#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";
}
}
Kết quả
It will overflow