微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Integer Reverse 失败 4 种情况

如何解决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 举报,一经查实,本站将立刻删除。