1. 题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路:
自己的解题思路:
int reverse(int x){
char data[32] = "";
int len = 0, temp = 0;
long int y = 0;
sprintf(data, "%d", x); //change x to string
len = strlen(data); //get string's length
if (data[0] == '-')
temp = 1;
y = 0;
for(len; len>temp;) {
y = y*10 + ((data[--len]-48)); //char to int, need to reduce 48
}
if (temp)
y = -y;
if (y > 2147483647 || y < -2147483648)
return 0;
return y;
}
目前了解的比较优秀的解题思路:
int reverse(int x){
long count=0;
while(x){
count=count*10+x%10;
x=x/10;
}
return count>INT_MAX||count<INT_MIN? 0 : count;
}
3. 知识点总结:
a. 数学方法.
注意: 负数对10取余数后, 也为负数.
负数0至-9,对10去除 /的结果为0.
b. 整形最大值最小值判断方法.
方法一:
可以用INT_MAX或者INT_MIN判断.
count>INT_MAX||count<INT_MIN
方法二:
可以用强制类型转换判断:
eg: count != (int)count ? 0 : count;