C语言实现整数反转
题目来源:LeetCode题库
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
例子1:
输入: 123
输出: 321
例子2:
输入:-123
输出:-321
例子3:
输入:1230
输出:321
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
代码实现:
#include<stdio.h>
#include <limits.h>
int reverse(int x)
{
int rev = 0;
while(x != 0)
{
// 判断反转后的数值是否越界
if(rev > INT_MAX / 10 || rev < INT_MIN / 10)
return 0;
// 反转操作
// 第一次循环rev为0,对x进行取余,获取个位数据存放到rev;
// 第二次循环rev乘10给个位留空间,x的原十位数据为第二次循环的个位数据,获取后加上赋值给rev;
// 第三次循环rev乘10给个位留空间,x的原百位数据为第三次循环的个位数据,获取后加上赋值给rev;
// ...(以此类推)
// 实现反转
rev = rev * 10 + x % 10;
// 移掉个位数据
x /= 10;
}
return rev;
}
int main(void)
{
int num = 0;
printf("\r\n32位int的取值范围为:%d ~ %d\r\n", INT_MAX, INT_MIN);
printf("请输入数字:");
scanf("%d", &num);
num = reverse(num);
printf("反转后的数字为:%d\r\n", num);
return 0;
}
执行时间4ms,内存消耗5.1M
结果输出:
例子1:
例子2:
例子3: