题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
这个题目的“注意”是一个非常关键的信息,各位朋友在作者这道题的时候一定要注意。因为存在整数溢出现象,所以要额外考虑这种情况。还有就是要注意一下负数的负号,有些算法需要考虑负号,有些算法不用。下面给出求解本题的C++和Python代码。
C++:
class Solution {
public:
int reverse(int x) {
int number[11];
int cnt=0,i;//cnt用来记录位数
long result=0;//存储结果
if(x==0){return 0;}//如果输入的是0,那么直接返回0
else if(x<0){unsigned int x = -x;}//如果输入的是负数,那么用一个无符号整数存储x的绝对值
while(x!=0){//遍历x的每一位
if(cnt==0&&x%10==0){x/=10;continue;}//如果最后一位是0,那么反转后第一位是0,不符合要求,直接忽略掉,进行下一次循环
if(cnt>10){return 0;}//int型数据位数最多是10位,如果超出10位那么一定溢出
else{
nuber[cnt++] = x%10;
x/=10;
}
}
int temp = cnt-1;
for(i=0;i<cnt;i++){
result += pow(10,temp)*number[i];
temp--;
}
if(result>=pow(2,31)||result<pow(-2,31)){return 0;}//判断溢出的情况
return result;
}
};
Python:
class Solution:
def reverse(self, x: int) -> int:
str_x = str(x)//将整数x转换为字符串
if x>0:
str_x = str_x[::-1]//遍历字符串,“步伐”为-1,即倒序输出
x = int(str_x)//最后转化为int型整数
elif x==0:
return 0
else://x是负数的情况
str_x = str_x[1:][::-1]
x = int(str_x)
x = -x
return x if -2**31<=x<2**31 else 0
因为本人水平比较低,所以C++代码编写的有点复杂,只是给各位朋友提供一种思路,建议想看更高效C++代码的朋友上网上去搜其他大牛的博客。