zoukankan      html  css  js  c++  java
  • 不用除法来实现整数的除法运算

    我们知道:a/b 的话,可以描述为 a=q*b+r, 这里 r是一个   0<=r<b 的数

    所以我们要找到最大的q来满足这个等式。

    在寻找的时候我们可以每次乘二来探测,以降低线性查找的复杂度。

    int div1(const int x,const int y)
    {
    	int a=x,b=y,c=0;
    	int d=0;
    	while(a>=b)
    	{
    		d=1;
    		while(b*d<=a)
    		{
    			d*=2;
    		}
    		c+=d>>1;
    		a=a-b*(d-1);
    	}
    	return c;
    }
    

    方法二: 我们也可以通过二分查找。

    对于a/b=c ,c的范围可以在【0,a]之间,因为b是要求大于等于1的。

    代码如下所示:

    int div2(const int x,const int y) // 二分查找
    {
    	int i=0,j=x;
    	while(i<j-1)
    	{
    		int m=i+((j-i)>>1); // 不能用除法
    		if(m*y>x)
    		{
    			j=m-1;
    		}
    		else if(m*y<x)
    		{
    			i=m;
    		}
    		else
    		{
    			return m;
    		}
    	}
    	if(i+1==j)
    	{
    		if(j*y<=x)
    			return j;
    		else
    			return i;
    	}
    	else
    	{
    		return i;
    	}
    
    }
    

      

  • 相关阅读:
    POJ3666 Making the Grade[动态规划]
    vector内部的实现1
    win32概述
    stl概述
    C++概要简介
    类的常量成员
    模板
    c11标准
    异常处理
    pak文件的打包和解包
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3288459.html
Copyright © 2011-2022 走看看