为什么这行代码很重要?(没有它我会得到错误的答案)if (dividend == Integer.MIN_VALUE && divisor == -1) { return Integer.MAX_VALUE;}问题:不使用乘法、除法和 mod 运算符将两个整数相除。如果溢出,返回2147483647回答public int divide(int dividend, int divisor) { if(divisor == 0){ return dividend > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } if(dividend == 0){ return 0; } if (dividend == Integer.MIN_VALUE && divisor == -1) { return Integer.MAX_VALUE; } boolean isNeg = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0); Long up = Math.abs((long) dividend); Long down = Math.abs((long) divisor); int res = 0; while(up >= down){ int shift = 0; while(up >= (down << shift)){ shift++; } up -= down << (shift - 1); res += 1 << (shift - 1); } return isNeg ? -res : res;}
2 回答
莫回无
TA贡献1865条经验 获得超7个赞
Java 使用 32 位来存储int
.
最大整数值为 2 31 -1
0111 1111 1111 1111 1111 1111 1111 1111
最小整数值为 -2 31
1000 0000 0000 0000 0000 0000 0000 0000
换句话说, int 没有足够大的值来存储 2 31 ( -Integer.MIN_VALUE
)。
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
因为,的绝对值Integer.MAX_VALUE
和Integer.MIN_VALUE
不相等。
Integer.MAX_VALUE
是2147483647
Integer.MIN_VALUE
是-2147483648
如果你把Integer.MIN_VALUE
通过-1
,该值会溢出(2147483648 > 2147483647
),因此必须有此操作的限制。
添加回答
举报
0/150
提交
取消