自学内容网 自学内容网

每日一题&&学习笔记

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

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

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0
class Solution {  
public:   
    int reverse(int x) {  
        // 定义一个变量rev来存储反转后的结果,初始化为0  
        int rev = 0;  
          
        // 使用while循环来反转整数x,直到x变为0  
        while (x != 0) {  
            // 检查在添加下一个数字之前,rev是否已经超出了32位整数的范围  
            // 这是通过比较rev乘以10(即rev的下一个可能值,因为我们要加上一个新的最低位数字)  
            // 是否在INT_MIN/10和INT_MAX/10之间来实现的  
            // 如果不在这个范围内,则直接返回0,因为添加任何数字都会导致溢出  
            if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {  
                return 0;  
            }  
              
            // 取x的最低位数字  
            int digit = x % 10;  
              
            // 去掉x的最低位,为下一次迭代准备  
            x /= 10;  
              
            // 将取得的最低位数字digit加到rev的末尾,即乘以10(向左移动一位)然后加上digit  
            rev = rev * 10 + digit;  
        }  
          
        // 当x变为0时,循环结束,此时rev存储了x反转后的结果  
        // 返回反转后的整数  
        return rev;  
    }  
};

反转整数的思路到是不难理解。这里主要是考虑数据范围的问题。先了解一下INT_MIN的值为负的2的32次方减1,INT_MAX的值为2的32次方减1。注意使用INT_MIN和NT_MAX的时候,要使用头文件#include<limits.h>。


原文地址:https://blog.csdn.net/m0_73096516/article/details/142833307

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!