【 7. 整数反转】 LeetCode

题目描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

class Solution {
public:
    int fun(int x){
	int num=0;
	while(x!=0){
		num++;	
		x=x/10;
	}
	return num;
}

int reverse(int x) {
        if(x<=-2147483647||x>=1563847412){
            return 0;
        }
        bool flag=1;
        if(x<0){
            flag = 0;
        }
        int m=0;
        int temp;
        if(x%10==0){
        	x=x/10;
        }
        int n = fun(x);
        //cout<<n<<endl;
        
        while(n!=0&&x!=0){
            temp=x%10;
            if(temp<0){
                temp*=-1;
            }
            if(n!=0){
            	double kk = temp*pow(10,n-1);
                if(2147483647-m<kk){
                    return 0;
                }
            	m += (int)kk;
                if(m<0){
                    return 0;
                }
            }
            else{
            	m += temp;
            }
            x=x/10;
            n--;
        }
        if(m>2147483648){
        	return 0;
        }
        if(!flag){
            m=m*(-1);
        }
        
        if(m<(-2147483647)){
        	return 0;
        }
        
        return m;
}

};

提交结果:

这道题虽然是绿色题,但是我花了近3个小时才写出来。。但是最后显示用时还算理想就感觉辛苦没白费QAQ 。处理溢出部分实在是太让我头疼了,想用异常处理的,但对于数据溢出的情况C++的异常是检测不出来的。。感觉自己要补的功课还有很多。

猜你喜欢

转载自blog.csdn.net/piano_diano/article/details/89048219