第一题:输入两个整数,求商,要求不得使用乘除求余符号

263 阅读1分钟

整数除法

题目1:输入2int 整数,他们进行除法计算并返回商,要求不得使用乘号'*',除号'/',及求余号'%',当发生溢出时,返回最大的整数值。假设除数不为0.例如,输入152,输出 15/2的结果,即 7.

代码 js

点击展开
function divide(dividend, divisor){
    //定义一个被除数
    var dividend = dividend;
    //定义一个除数
    var divisor = divisor;

     //将除数和被除数统一 设置为 正数
     var negative = 2;
     if(dividend < 0) {
        negative--;
        dividend = -dividend;
     }
     if(divisor < 0) {
        negative--;
        divisor = -divisor;
     }
     //接收计算下来的值
     var result = divideCore(dividend, divisor);
     // 利用三元运算符 确定结果的正负
     return negative == 1 ? -result : result;
}
function divideCore(dividend, divisor) {
    var dividend = dividend;
    var divisor = divisor;
    var result = 0;
    //如果 dividend 大于 divisor 进行下一步计算 否则直接返回 result = 0
    while(dividend >= divisor) {
        var value = divisor;
        //设定一个系数quotient确定 能够大于多少个divisor 即商
        var quotient = 1; 
        //如果大于两倍的value 则系数加倍,并且将value翻倍 直到while循环结束 
        while(dividend >= value + value) {
            quotient += quotient;
            value += value;
        }
        //将quotient 全部加起来得到 最后的商 结果
        result += quotient;
        dividend -= value;
    }
    //将计算结果返回
    return result;
}
console.log(divide(-7, 3));

代码 Java

点击展开
public class Interview02 {
    public static void main(String[] args) {
        Interview02 interview02 = new Interview02();
        System.out.println(interview02.divide01(0x80000000,-1));
    }
    public int divide01(int dividend, int divisor) {
        if (dividend == 0x80000000 && divisor == -1) {
            return Integer.MAX_VALUE;
        }
        // 判断 整数的正负 并将他们统一为 正数进行计算
        int negative = 2;
        if (dividend < 0){
            dividend = -dividend;
            negative--;
        }
        if (divisor < 0) {
            divisor = -divisor;
            negative--;
        }
        int result = divideCore(dividend,divisor);

        return negative == 1 ? -result : result;
    }
    public int divideCore(int dividend, int divisor){
        int result = 0;
        while (dividend > divisor) {
            int value = divisor;
            int quotient = 1;
            while (value >= 0xc0000000 && dividend >= value + value) {
                value += value;
                quotient += quotient;
            }
            result += quotient;
            dividend -= value;
        }
        return result;
    }

}