如何不使用除法操作符实现两个正整数的除法

分析:

方法一:减法

  使被除数不断减去除数,直到相减的结果小于除数为止。此时商就为相减的次数,余数为最后相减的差。

实现代码:

package lock;

public class T16 {
	public static void divide(int m,int n)
	{
		/*方法功能,计算两个自然的除法*/
		System.out.println(m+"除以"+n);
		int res=0;
		int remain=m;
		//被除数减除数,直到相减结果小于除数为止
		while(m>n)
		{
			m=m-n;
			res+=1;
		}
		remain=m;
		System.out.println("商为:"+res+"余数:"+remain);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int m=168;
		int n=4;
		divide(m,n);

	}

}

运行结果:

在这里插入图片描述

算法性能分析:

  这种方法循环的次数为m/n,因此算法的时间复杂度O(m/n)。需要注意的是,这种方法也实现了不用%操作实现%运算的目的。

方法二:移为法

  用等价的加法操作来实现。

实现代码:

package lock;

public class T17 {
	public static void divide(int m,int n)
	{
		System.out.println(m+"除以"+n);
		int multi;
		int result=0;
		while(m>=n)
		{
			multi=1;
			while(multi*n<=(m>>1))
			{
				multi<<=1;
			}
			result+=multi;
			//相减的结果进入下一次循环
			m-=multi*n;
		}
		System.out.println("商为:"+result+"余数:"+m);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int m=256;
		int n=4;
		divide(m,n);
	}

}

运行结果:

在这里插入图片描述

算法性能分析:

  由于这种方法采用指数级的增长方式不断逼近m/n,因此算法的时间复杂度为O(log(m/n))。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值