CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

不使用乘法除法模运算实现乘以7除以7?

楼主fender()2001-12-16 15:56:47 在 专题开发/技术/项目 / 数据结构与算法 提问

怎么实现?  
  我考虑用自加自减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

相关问题

  • edit.text乘法运算
  • 如何实现除法运算
  • 整数除法与浮点数乘法哪个效率高?
  • 关于除法运算,非常简单的问题
  • excel 中可以进行整行整列的除法运算吗?
  • 请问如何只用位运算就能计算除法
  • 求幂运算的最少乘法次数?
  • 怎么取数字做乘法运算呢?
  • 关系代数中的除法运算用sql语句怎么实现?
  • 除法运算符是“/”吗?我这里为什么结果是取整?

关键词

  • 除法
  • 乘法
  • 左移
  • 运算
  • 使用
  • 实现
  • 效率
  • 加上
  • number
  • result

得分解答快速导航

  • 帖主:fender
  • debussy
  • minkerui
  • mathe
  • mathe

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo