求一个整数的逆整数(Reverse Integer)
来源:互联网 发布:淘宝客佣金到账 编辑:程序博客网 时间:2024/06/07 23:34
leetCode中一道题。求一个整数的逆整数(就是将整数的各个位进行反序)。
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
正常情况下需要考虑的地方就是整数反序后可能会溢出。java中int型用四个字节存储,范围为 [-2^32,2^32-1),即是[-2147483648,2147483647)。同时在程序中用到%运算,需要注意取模运算和求余数运算的不同之处。
摘自百度百科:计算模或者余数: r = a - c*b. 求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。(java中%运算符指的是求余数,而余数是可正可负的,与潜意识中的认识不同。)
下面是leetcode中的答案,简直是精简完美到不能。
public int reverse(int x) { int ret = 0; while (x != 0) { // handle overflow/underflow if (Math.abs(ret) > 214748364) { return 0; } ret = ret * 10 + x % 10; x /= 10; } return ret;}
可能需要注释的地方就是在检查ret溢出的相关语句(if语句)。 程序在检测溢出的时候用到的阈值是214748364,而int的范围值是2147483648 , 比所用的阈值多了最后一位。 原因在于 我们检测ret是否溢出的时候应该用到一个先决条件就是x是正常int值,没有溢出。 因为x没有溢出,那么当x为十位数的时候(这时候ret才可能溢出),x的第一位肯定只会为1或者2,也就是说ret的最后一位只可能是1或者2。 而int范围阈值的最后一位为8,所以我们完全可以不考虑ret最后一位。
0 0
- 求一个整数的逆整数(Reverse Integer)
- Reverse Integer--整数的反转
- 【LeetCode】- Reverse Integer(将一个整数反转)
- 将一个整数逆转 Reverse Integer
- [leetcode] Reverse Integer 反转一个整数
- 7. Reverse Integer 翻转一个整数
- 7. Reverse Integer (翻转一个整数)
- Reverse Integer 翻转整数
- Reverse Integer--反转整数
- Reverse Integer 整数逆转
- LeetCode7——Reverse Integer(将一个整数反转,注意溢出的处理)
- 反转整数的每一位(reverse integer)
- LeetCode | Reverse Integer(翻转整数)
- [LeetCode-7] Reverse Integer(反转整数)
- LeetCode 7 Reverse Integer(翻转整数)
- 【007-Reverse Integer(翻转整数)】
- LeetCode 7. Reverse Integer(反转整数)
- 7. Reverse Integer (转置整数)
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第2章动手实战Scala第1小节:动手体验Scala(1)
- java第二讲(随笔)
- Spring3.1 对Bean Validation规范的新支持(方法级别验证)
- 介绍Unsupported major.minor version 51.0错误解决办法
- Access restriction required library rt.jar
- 求一个整数的逆整数(Reverse Integer)
- xp系统下硬盘安装centos6.5
- override 和 overload的区别
- [Section 1.1] Your Ride Is Here
- Win32中的字符编码与字符类型
- 未入门的程序员
- [LeetCode] Unique Binary Search Trees
- 数数
- TCP的输入