### int_max , int_min, leetcode problem

Hello, I am trying some leetcode problems but couldnt solve it and had to look at the solution. But I am a bit confused with it. Mostly the 2 lines with INT_MAX and INT_MIN. I understand that these are the max and min that an int can be, but I just cant figure out how it is working in this piece of code, especially with the >7 and <8.

If possible could someone please explain this to me

 ``123456789101112131415`` `````` int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; cout <<"pop " << pop << "\n"; x /= 10; cout << "x " << x << "\n"; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0; rev = rev * 10 + pop; cout << "rev " << rev << "\n"; } return rev; }``````
the return zeros are error handling of sorts.
if its > int max / 10, then multiply by 10 on line 11 won't work right, so it quits.
if its < int min/10 you have a similar problem with a negative number.
the 7 and 8 are hard coded looking at the issue bit-wise. If you don't see it, look at an 8 bit number and it will pop out, its a lot of typing 1s and 0s to show...
It's basically to detect numeric overflow and underflow.

And because it's trying to reverse a number, the 7 and -8 come from the least significant digit of the number (which is about to become the most significant digit of the number).
 ``123456789101112131415`` ``````\$ cat baz.cpp #include #include using namespace std; int main() { cout << "INT_MIN=" << INT_MIN << endl; cout << "INT_MAX=" << INT_MAX << endl; return 0; } \$ g++ baz.cpp \$ ./a.out INT_MIN=-2147483648 INT_MAX=2147483647``````

Topic archived. No new replies allowed.