Skip to main content
A cup of beer
  1. ACM Hub/

😋|LeetCode007|反转数字

·63 words·1 min
Table of Contents

难度:Easy😋

题目 #

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

思路 #

  • 如何在不用字符串的情况下反转数字?
    • sum初始化为0,每次都“十进制左移“,即*10;然后补充空出来的那个个位数。
    • 如何获取个位数?即每次依次从右向左(即从低位到高位地)取输入数字的每一位。
  • 还需要注意,题目要求如果int溢出了就输出0.
    • 如果溢出,lc平台会RE。
    • 判断溢出可以根据符号判断。但是直接就RE了,来不及判断符号。这怎么办?——可以用long long接住他,然后与INT_MAX(2^31-1),INT_MIN(-2^32)比较即可。

代码实现 #

class Solution {
public:
    int reverse(long long x) {
        if(x<INT_MIN||x>INT_MAX)return 0;
        int sign=1;
        if(x<0){
            sign=-1;
            x=-x;
        }    
     
        long long sum=0;
        while(x>0){
            //cout<<x%10<<' '<<sum<<endl;
            sum=sum*10+x%10;
            x/=10;
        }
        sum*=sign;
        if(sum>INT_MAX||sum<INT_MIN)return 0;
        return sum;
    }
};