2022/11/13 算法练习-两数相除

该博客介绍了一种在不允许使用乘法、除法和mod运算符的情况下,通过循环加减法来计算两个整数相除的商的方法。博主首先分析了正负数的情况,然后给出了分类讨论的解决方案。对于同号的被除数和除数,通过连续减去除数来增加商的值;对于异号的情况,则通过连续加上除数来减少商的值。最后,博主提供了一个Java代码实现来演示这个算法。
摘要由CSDN通过智能技术生成

题目介绍

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商(忽略小数部分)。
示例1:
dividend:11 divisor:3
result:3
示例2:
dividend:7 divisor:-2
result:3

思路

①由于运算符受限制,第一时间想到的是循环做加减法,这也是乘除法的本质所在
②用加减法代替乘除法需要考虑除数和被除数的正负问题,
我给出的解决方案是分类讨论,第一类是同号,第二类是异号,用一个结果计数器从0开始根据循环次数来计算商
③对于同号,每一次循环都把被除数减去除数得到的结果赋值给被除数,循环次数加1,商加1,只要被除数的绝对值大于等于被除数的绝对值,说明可以继续减,则循环继续,直到条件不满足
例如:11÷3向下取整相当于计算11-3-3-3-2中有多少个-3
当减了三次3之后所得的被除数是1,由于1的绝对值小于3的绝对值,所以循环终止,商为3
④对于异号,每一次循环都把被除数加上除数得到的结果赋值给被除数,循环次数加一,商减1(由于是异号,所得的商必须是负数),只要被除数的绝对值大于等于除数的绝对值,循环都继续进行

代码实现

class Solution {
    public int divide(int dividend, int divisor) {
        int result=0;
        while(Math.abs(dividend)>=Math.abs(divisor)){
            if((dividend>0&&divisor>0)||(dividend<0&&divisor<0)){
                dividend-=divisor;
                result++;
            }else{
                dividend+=divisor;
                result--;
            }
        }
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值