给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
示例 1:
输入: dividend = 10, divisor = 3 输出: 3
示例 2:
输入: dividend = 7, divisor = -3 输出: -2
说明:
- 被除数和除数均为 32 位有符号整数。
- 除数不为 0。
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
package leetCode_5_14; /** * @author : caoguotao * @date 创建时间:2019年5月17日 下午5:12:19 * @version 1.0 * @parameter * @since * @return */ public class Solution29 { public static void main(String[] args) { int res = divide(0, 2); System.out.println(res); } public static int divide(int dividend, int divisor) { long res = 0; // 代表结果的正负 int flag = 1; if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) { flag = -1; } long div = dividend; long divi = divisor; div = Math.abs(div); divi = Math.abs(divi); for (int i = 31; i >= 0; i--) { if ((divi << i) > div) { } else { res = (long) Math.pow(2.0, i); div -= (divi << i); while (div >= divi) { res++; div -= divi; } break; } } if ((res * flag) > Integer.MAX_VALUE || (res * flag) < Integer.MIN_VALUE) return Integer.MAX_VALUE; return (int) (res * flag); } }