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的兴趣学的,希望能与大家多多交流,如有纰漏之处,还请各位不吝赐教。
阅读更多相关文章推荐
- LeetCode7——Reverse Integer(将一个整数反转,注意溢出的处理)
- 【leetcode】Reverse Integer整数反转----Java代码实现
- LeetCode 第七题 反转整数
- [leetcode]反转整数
- leetcode 7. Reverse Integer整数反转
- [LeetCode-7] Reverse Integer(反转整数)
- leetcode——Reverse Integer 反转整数数字(AC)
- [Leetcode] reverse integer 反转整数
- LeetCode-7-反转整数-c# 版本
- 【LeetCode】- Reverse Integer(将一个整数反转)
- LeetCode - 7. 反转整数
- (LeetCode每日一刷02)反转整数
- Leetcode:Reverse Integer ,整数反转
- [置顶] [LeetCode] Reverse Integer 整数反转
- [leetcode 7] Reverse Integer(整数反转) c函数实现
- LeetCode 7. Reverse Integer(反转整数)
- Leetcode Reverse Integer 反转整数
- leetcode的python实现 刷题笔记7: 反转整数
- [leetcode] Reverse Integer 反转一个整数
- (LeetCode)Reverse Integer --- 反转整数