LintCode整数反转问题学习记录

LintCode整数反转问题学习记录_第1张图片

这道题有意思的地方在于判断溢出,因为计算在不断进行,你需要提前判断是否会溢出,而且在c++中,对int最大值以及最小值进行了宏定义。 

#define INT_MAX          2147483647

#define INT_MIN          (-INT_MAX-1) 

 我们需要在每次计算rec返回值判断以下,是否下次的计算会超出数值范围。

我们先把之前不用考虑数值超出的范围拷出来。

int reverse(int x) 
{
    int rec = 0;
    while(x != 0)
    {
        int pop = x % 10;
        rec = pop + rec * 10;
        x/=10;
    }

    return rec;
}

有两种情况需要我们考虑:

第一种 计算值*10之后直接越界;

第二种 计算值*10加上取余值(pop)才会越界。

int reverse(int x) 
{
    int rec = 0;
    while(x != 0)
    {
        int pop = x % 10;
        if( (rec > INT_MAX /10) || (rec == INT_MAX /10 && pop > 7)) return 0;
        if( (rec < INT_MIN /10) || (rec == INT_MIN /10 && pop < -8)) return 0;
        rec = pop + rec * 10;
        x/=10;
    }

    return rec;
}

 

你可能感兴趣的:(C++)