Check for Integer Overflow

• Difficulty Level : Easy
• Last Updated : 05 Jan, 2022

Write a “C” function, int addOvf(int* result, int a, int b) If there is no overflow, the function places the resultant = sum a+b in “result” and returns 0. Otherwise it returns -1. The solution of casting to long and adding to find detecting the overflow is not allowed.
Method 1
There can be overflow only if signs of two numbers are same, and sign of sum is opposite to the signs of numbers.

1)  Calculate sum
2)  If both numbers are positive and sum is negative then return -1
Else
If both numbers are negative and sum is positive then return -1
Else return 0

C++

 #include using namespace std; /* Takes pointer to result and two numbers as    arguments. If there is no overflow, the function    places the resultant = sum a+b in “result” and    returns 0, otherwise it returns -1 */int addOvf(int* result, int a, int b){    *result = a + b;    if(a > 0 && b > 0 && *result < 0)        return -1;    if(a < 0 && b < 0 && *result > 0)        return -1;    return 0;} // Driver codeint main(){    int *res = new int[(sizeof(int))];    int x = 2147483640;    int y = 10;     cout<

C

 #include#include /* Takes pointer to result and two numbers as    arguments. If there is no overflow, the function    places the resultant = sum a+b in “result” and    returns 0, otherwise it returns -1 */ int addOvf(int* result, int a, int b) {     *result = a + b;     if(a > 0 && b > 0 && *result < 0)         return -1;     if(a < 0 && b < 0 && *result > 0)         return -1;     return 0; }  int main() {     int *res = (int *)malloc(sizeof(int));     int x = 2147483640;     int y = 10;      printf("%d", addOvf(res, x, y));      printf("\n %d", *res);     getchar();     return 0;}
Output:
-1
-2147483646

Time Complexity: O(1)
Space Complexity: O(1)
Method 2
Thanks to Himanshu Aggarwal for adding this method. This method doesn’t modify *result if there us an overflow.

C++

 #include using namespace std; int addOvf(int* result, int a, int b){     if (a >= 0 && b >= 0 && (a > INT_MAX - b)) {        return -1;    }     else if (a < 0 && b < 0 && (a < INT_MIN - b)) {        return -1;    }    else {        *result = a + b;        return 0;    }} int main(){    int a, b;    int* res;    a = INT_MAX;    b = 8192;     cout << addOvf(res, a, b);     return 0;} // This code is contributed by Sonu Kumar Pandit

C

 #include #include #include  int addOvf(int* result, int a, int b){    if (a > INT_MAX - b)        return -1;    else {        *result = a + b;        return 0;    }} int main(){    int* res = (int*)malloc(sizeof(int));    int x = 2147483640;    int y = 10;     printf("%d", addOvf(res, x, y));    printf("\n %d", *res);    getchar();    return 0;}
Output:
-1
0

Time Complexity: O(1)
Space Complexity: O(1)

Please write comments if you find any bug in above codes/algorithms, or find other ways to solve the same problem

My Personal Notes arrow_drop_up