两数相除
问题陈述
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
问题解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
public int divide(int dividend, int divisor) { if (dividend == 0) { return 0; } if (dividend == Integer.MIN_VALUE && divisor == -1) { return Integer.MAX_VALUE; } boolean negative; negative = (dividend ^ divisor) <0; long t = Math.abs((long) dividend); long d= Math.abs((long) divisor); int result = 0; for (int i=31; i>=0;i--) { if ((t>>i)>=d) { result+=1<<i; t-=d<<i; } } return negative ? -result : result; }
|