不使用乘法除法模运算实现乘以7除以7?
怎么实现?
我考虑用自加自减7来实现,可是这样效率很低.
汇编怎么实现的?
给个建议.
谢谢
问题点数:20、回复次数:6Top
1 楼debussy(debussy)回复于 2001-12-16 15:59:25 得分 5
x左移2位加上x左移一位加上x
总共两次左移,三次加法,因该速度很快了,而且没有使用乘法Top
2 楼minkerui(你好)回复于 2001-12-16 16:24:42 得分 5
乘以7:Number Shl 3 -Number
除以7:Number Shr 3 +NumberTop
3 楼fender()回复于 2001-12-16 16:43:00 得分 0
楼上两位大侠乘法没问题,除法还是不行啊?
用对数运算?Top
4 楼mathe()回复于 2001-12-16 17:02:21 得分 5
除法可以使用
Input x;
result=0;
y=x;
while(y>0){
y>>=3;
result+=y;
}
if(x-(result<<3)-result>=7)result++;
OK.
Top
5 楼minkerui(你好)回复于 2001-12-16 17:16:53 得分 0
因为除法移位时要丢位,所以不能用移位。楼上的是使用高精度除法的思想,以减代除来完成的,但效率太低。Top
6 楼mathe()回复于 2001-12-16 17:38:46 得分 5
上面使用的是
x/7=x/8+x/(8*8)+x/(8*8*8)+...
效率其实已经很高了,因为实际上没有除几次就到0了,
问题在于上面的公式还有误差,要将后面的if改为while.
另外还有的方法是用
unsigned int mul=0xb6db6db7;
unsigned int x;
then x/7 == x*mul; //if sizeof(unsigned int)==4.
当然了,做乘法同样要通过移位和加减来完成。
那么我们需要21次左移加上加法运算(当然还可以通过使用减法降低一次运算)。
其实复杂度比上面的算法也差不多Top




