您的位置:首页 > 其它

Leetcode 整数反转

2018-12-18 20:09 260 查看

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

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路:
①.分析返回本身的数也就是绝对值小于10的;
②.利用循环取余来反转数,循环过程中判断数据是否溢出;
③.在循环过程中提交时会发现有一类数不会通过测试
例:1020320489
*分析:*2的31次幂为2147483648,在此类数反转的过程中会发现数据溢出了,正常情况下应该是9840230201,它是大于2147483648的,所以我们应当在数字未溢出时对其进行判断,因此我给出了这样的判断条件:

num<-214748364||(num==-214748364)&&x==-9

num>214748364||(num==214748364)&&x>=8

代码如下:

int reverse(int x) {
int num=0;
if(abs(x)<10)
return x;
while(x!=0){
num=10*num+x%10;//2的31次幂,2147483648
x=x/10;
if(x<0){
if(num<-214748364||(num==-214748364)&&x==-9)
return 0;
}
if(x>0){
if(num>214748364||(num==214748364)&&x>=8)
return 0;
}
}
return num;
}

PS:就本人来说这种方法算是不难想出的,但是提交后看到了高手的代码就觉得受益了;

int reverse(int x) {
int y,z;
long long result;
y=x/10;
z=x%10;
result=z;
while(y)
{z=y%10;
y=y/10;
result=result*10+z;
}
if(2147483647>=result&&result>=-2147483648)
return (int)result;
return 0;
}

欢迎大家一起来探讨,本人也是自己对于C的兴趣学的,希望能与大家多多交流,如有纰漏之处,还请各位不吝赐教。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: