正整数X,Y来表示
本题有两种解法:
①用减法实现:
大致思想是,
while(X >Y)
{
count++;
X = X - Y;
}
②移动操作
位运算知识:
一、常用等式 -n = ~n+1 = ~(n-1)
二、获取整数n的二进制最后1个‘1’:n&(-n) = n&~(n-1)
获取整数n的二进制最后1个‘1’:n&(n-1)
int div(int x, int y)
{
int result=0;
while(x>=y)
{
int multi=1;
while(y*multi <= (x>>1))
{
multi = multi << 1;
}
result+=multi;
x -= y*multi;
}
return result;
}
通过预先的使 X>>1的减小,来让multi增大,multi<<1,使得循环次数有效降低。
其实①②实现的关键都是通过减法,②知识加速了整个进程,减少了次数。