如何解决Integer Reverse 失败 4 种情况
由于某种原因,这段代码只失败了 4 种情况,即当通过 1534236469 时,它应该返回 0 但返回 2147483647。
编辑:代码应该反转它传递的值。如果给定 123,则需要返回 321。
sudo
解决方法
您有未检测到的 int
溢出。
Math.pow(2,31)
是 2 147 483 648。类似地,Math.pow(-2,31)
是 -2 147 483 648。您尝试反转的值 1 534 236 469 正好在这些范围内。因此,您的方法会在可能返回 0 的开头跳过 if
语句。
然后它尝试反转数字。反过来应该是 9 646 324 351。但是这个数字太大了,无法放入 32 位带符号的 int
。 Java 所做的是丢弃最前面的位(最重要的位)。这势必会给我们一个无意义的结果。这恰好是 2 147 483 647(可以放入 int
的最大数字)。
解决方案?一种方法是在 long
而不是 int
中计算总和。这将确保您没有溢出。如果你想在 int
溢出的情况下返回 0,那么最后检查总和是否小于 2^32,如果不是,则返回 0。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。