๐ŸŒ•๐ŸŒ• ๐ŸŒ— 29. ไธคๆ•ฐ็›ธ้™ค

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • Number
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ•๐ŸŒ• ๐ŸŒ— 29. ไธคๆ•ฐ็›ธ้™ค

้šพๅบฆ: ๐ŸŒ•๐ŸŒ• ๐ŸŒ—

้—ฎ้ข˜ๆ่ฟฐ

img_1.png


่งฃๆณ•

class Solution {
    public int divide(int dividend, int divisor) {
        // ๆ€่ทฏ๏ผš
        // ไธบ้˜ฒๆญข่พน็•Œ้—ฎ้ข˜๏ผŒ็”จ่ดŸๆ•ฐไปฃๆ›ฟๆญฃๆ•ฐ่ฎก็ฎ—
        // ่ถ…่Œƒๅˆคๆ–ญ
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        if(dividend == min && divisor == -1) {
            return max;
        }
        if(dividend == 0) {
            return 0;
        }
        int flag = 1;
        if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)) {
            flag = -1;
        }
        // ๅฐ†ๆญฃๆ•ฐๅ…จ้ƒจๅ˜ไธบ่ดŸๆ•ฐ
        if(dividend > 0) {
            dividend = - dividend;
        }
        if(divisor > 0) {
            divisor = - divisor;
        }
        // ่ฎก็ฎ—
        int res = 0;
        while(dividend <= divisor) {
            int tmp = divisor; // ๆ‰พๅˆฐ dividend ่ƒฝๅคŸ้™ค็š„ๆœ€ๅคง้™คๆ•ฐ
            int count = 1;
            while(dividend - tmp <= tmp) {
                // ่ฏดๆ˜Ž tmp ๅฏไปฅๅขžๅคงไธบๅŽŸๆฅ็š„ 2 ๅ€
                tmp += tmp;
                count += count;
            }
            // tmp < dividend < 2*tmp
            res += count;
            dividend -= tmp; // ๆณจๆ„ๆ˜ฏ่ดŸๆ•ฐ็š„่ฟ็ฎ—
        }
        if(flag == 1) {
            return res;
        } else {
            return - res;
        }
    }
}

่พ“ๅ‡บ

img.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou