【LeetCode】No.7 Reverse Integer

版权声明:欢迎转载,但请注明出处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;
}

提交结果如下:

猜你喜欢

转载自blog.csdn.net/qq_28753373/article/details/82792356