版权声明:欢迎转载,但请注明出处https://me.csdn.net/qq_28753373 。谢谢! https://blog.csdn.net/qq_28753373/article/details/82792356
题目:
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
分析:
将一个整数倒序输出并不难,只要逐位对10取模,即可得到每一位的数值,但这一题需要考虑边界条件,即输入的整数倒序后可能会产生溢出。我们无法直接比较输入的整数x倒序后的整数y与int型的最大值INT_MAX的大小,但我们可以比较y/10与INT_MAX/10的大小:若y向上溢出,即y大于INT_MAX,则一定有y/10大于INT_MAX/10,或y/10等于INT_MAX/10且y的末位大于INT_MAX的末位7;若y向下溢出,即y小于INT_MIN,则一定有y/10小于INT_MIN/10,或y/10等于INT_MIN/10且y的末位小于INT_MIN的末位-8。
程序设计:
完整的测试代码如下:
#include <stdio.h>
#include <limits.h> //包含宏定义INT_MAX和INT_MIN
int reverse(int x);
int main()
{
int x, result;
printf("Please input the integer:\n");
scanf("%d", &x);
result = reverse(x);
printf("%d", result);
return 0;
}
int reverse(int x)
{
int result = 0;
while(x){
int bit = x % 10;
x = x / 10;
if(result > INT_MAX / 10 || (result == INT_MAX / 10 && bit > 7))
return 0;
if(result < INT_MIN / 10 || (result == INT_MIN / 10 && bit < -8))
return 0;
result = result * 10 + bit;
}
return result;
}
提交结果如下: