[leetcode] Divide Two Integers


problem



code

  • idea:
    A = e^logA
    LogA/B = LogA - LogB
  • application: A/B = e^LogA/B = e^(LogA - LogB)
  • class Solution {
        public int divide(int A, int B) {
            int ans = 0;
            if (B == -2147483648) return A == B ? 1 : 0;
            if (A == -2147483648) {
                if (B == 1) return -2147483648;
                if (B == -1) return 2147483647;
              	// A = -2147483648, B = -1000 => 2147483.648
              	// A = -2147483648, B = 1000 => -2147483.648
                System.out.println(">> " + Math.abs(A)); 
                // print: -2147483648; Math.abs does not work 
                // cuz there is no way to express 2147483648 lol
                A += Math.abs(B);
                ans++;
                
            }
            ans += 
              Math.floor(
                Math.exp(
                  Math.log(Math.abs(A)) - Math.log(Math.abs(B))
                )
            );
            return A > 0 == B > 0 ? ans : -ans;
        }
    }