题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0
思路
看到这个题目,它的目的就是翻转过来,尾巴的放在首位。那么首先是把每一位取出来,刚开始就会陷入取出每一位,然后计算它的位数,然后乘10的若干次方并累加。想了一下这样很累,而且代码会比较长。
然后就想我每次取余(个位)然后乘10并累加,并同步将原来的值取整去掉已经取过的尾巴数,知道取整结果为0,就结束了。
思路就是上述的这样,然后我们有一个注意的点,就是结果的范围,如果超出要返回0 ,那我们这个变量一定要大于int数,这里我们要知道32bit系统下,int和long是一样长度的,64bit系统下,long是8字节,int是4字节,所以我们可以定义long(目前一般电脑都是64bit系统)。
最后一个知识点INT_MAX 和INT_MIN 就是代表int类型的最大最小值,这个是C语言的库文件limits.h里定义好的。当然也可以求绝对值,但是要注意,最小负数的绝对值是要比最大正数大的。
下面上代码:
int reverse(int x){
long result = 0;
if(x == 0)
return 0;
while(x)
{
result = result*10 + x%10;
x /= 10;
}
return result>INT_MAX || result<INT_MIN ? 0 : result;
}
非常简短哈,有兴趣的朋友可以在评论区讨论一下,是否还有更简单的方法。