leetcode小白刷题之旅----7. Reverse Integer

仅供自己学习

 

题目:

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

思路:

通过对x模10使后面的数往前移,每多一位,原来的x*10再加上余数即可。

细节处理:

int 类型范围的限制,当x的范围在 -2^31~2^31-1范围内,但反转后得到的数可能会超过。所以要加IF来限制大小。

这里如果n在INT_MAX/10的情况都大于了那么显然明显超出了INT范围。如果n=INT_MAX/10,那么在判断最后一位数是不是小于 7,因为2^31-1这个数最小的那一位为7,只有小于7才不会溢出。

INT_MIN情况同上。

代码:

 1 class Solution {
 2 public:
 3     int reverse(int x) {
 4         int n=0;
 5         while (x!=0)
 6         {
 7             if(n > INT_MAX / 10 || (n == INT_MAX / 10 && x%10 > 7)) return 0;
 8             if(n < INT_MIN / 10 || (n == INT_MIN/10&& x%10<-8)) return 0;
 9             n=n*10+x%10;
10             x=x/10;
11         }
12         return n;
13     }
14 };

 

posted @ 2021-01-27 22:17  Mrsdwang  阅读(66)  评论(0编辑  收藏  举报