问题
Int#reverse
给Int
定义一个私有的扩展方法reverse
:
1 | // Solution7.kt |
单元测试
1 | // Soulution7.kt |
解法
反转整数可以与反转字符串进行类比。
我们想重复弹出num
的最后一位数字,并将它推入到result
的后面。最后,result
与num
相反。
要在没有辅助堆栈/数组的帮助下弹出和推入数字,我们可以使用数学方法。
数学方法
1 | // pop |
但是,这种方法很危险,因为当temp = result*10 + pop
时会导致溢出。
假设result
是正整数:
- 如果
temp = result*10 + pop
导致溢出,那么result >= Int.MAX_VALUE/10
- 如果
result > Int.MAX_VALUE/10
,那么temp = result * 10 + pop
一定会溢出 - 如果
result = Int.MAX_VALUE/10
,那么只要pop > 7,temp = result * 10 + pop
就会溢出
当result
为负整数时同理。
代码
1 | /** |