LeetCode 0029 Divide Two Integers
阿新 • • 發佈:2022-03-18
1. 題目描述
2. Solution 1
1、思路分析
思路:
商 x 除數 + 餘數 = 被除數
可以把一個dividend(被除數)先除以2n,n最初為31,不斷減小n去試探,當某個n滿足dividend/2n>=divisor時,
表示我們找到了一個足夠大的數,這個數*divisor是不大於dividend的,所以我們就可以減去2^n個divisor,以此類推
2、程式碼實現
package Q0099.Q0029DivideTwoIntegers; /* 思路: 商 x 除數 + 餘數 = 被除數 可以把一個dividend(被除數)先除以2^n,n最初為31,不斷減小n去試探,當某個n滿足dividend/2^n>=divisor時, 表示我們找到了一個足夠大的數,這個數*divisor是不大於dividend的,所以我們就可以減去2^n個divisor,以此類推 */ public class Solution { 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; // 符號相異取反 } }