我们知道: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; } }