7.Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
解题思路:
对整数按位取余,取出每一位数然后相加。期间对结果是否溢出进行判定
/*
执行用时 : 8 ms, 在Reverse Integer的C提交中击败了96.86% 的用户
内存消耗 : 6.8 MB, 在Reverse Integer的C提交中击败了76.77% 的用户
*/
int reverse(int x) {
//记录余数
int p;
//记录反转后的整数,用long int 类型定义
long int rever = 0;
while(x)
{
p = x%10;//取余
rever = rever*10 + p;//进行反转
//printf("p = %d,rever = %d ",p,rever);
//如果溢出,则返回0
if(rever < -2147483648 || rever > 2147483647 )
{
return 0;
}
x = x/10;//取下一位
}
return rever;
}
/*
输入: -123
stdout: p = -3,rever = -3 p = -2,rever = -32 p = -1,rever = -321
输出: -321
预期结果: -321
*/
后记:
- 由上面的测试用例可知,无需对负数符号进行特别处理。
- 反转后整数用long int 类型定义,可以确保安全
- -2147483648 可用INT_MIN; 2147483647可用INT_MAX-1