每日一题&&学习笔记
给你一个 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)!