c语言 - 整数反转(清晰思路,简洁代码)

题目:
j将一个 32 位的有符号整数,要将这个整数中每一位数字进行反转。
假设我们的环境只能存储得下 32 位的有符号整数,第1位为符号位和后32位,其数值范围为 [−2^31 , 2^31 − 1]。
根据这个假设,如果反转后整数溢出那么就返回 0。
例:
输入: 12345
输出: 54321

解析:
第1位为符号位和后32位,其数值范围为 [−2^31 , 2^31 − 1],即[ −2147483648 ~ 2147483647 ]。
超过这个范围就溢出,所以我们要判断,如果前8位相等,最后一位整数不大于7,负数不小于 -8。
如果它前8位就大于临界值的前8位,直接返回0 。

函数代码:

int reverse(int x){
	int res = 0;
	int sum = 0;
	while (x != 0)
	{
		res = x % 10;
		x /= 10;
		if (sum > 214748364 || (sum == 214748364 && res > 7))
			return 0;
		if (sum < -214748364 || (sum == -214748364 && res < -8))
			return 0;
		sum = sum * 10 + res;
	}
	return sum;
}
}

版权声明:本文为weixin_51136573原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。