【leetcode-29】Divide Two Integers(C)
2015-07-28 16:20
519 查看
问题描述:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析:这道题不允许用*/和%运算,因此只能模拟计算机对乘除法的做法来进行。请参考另外一篇博客:这里写链接内容另外,这道题最恶心的是一些边界值。如被除数为-2147483648;除数为:-2147483648;或者为+1,-1等等情况。
代码如下:4ms
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析:这道题不允许用*/和%运算,因此只能模拟计算机对乘除法的做法来进行。请参考另外一篇博客:这里写链接内容另外,这道题最恶心的是一些边界值。如被除数为-2147483648;除数为:-2147483648;或者为+1,-1等等情况。
代码如下:4ms
[code]int getBits(int num){ int numLen = 0; while(num){ numLen++; num = num>>1; } return numLen; } int getBit(int num,int pos){//获取从右到左的第pos位置的值1/0 pos = pos-1; int index = 1<<pos; if((num&index)>>pos) return 1; else return 0; } int divide(int dividend, int divisor) { int divide = 0; int res = 0; bool minus = false; bool minValue = false; if(dividend<0||divisor<0){ if(dividend<0&&divisor<0) { dividend = -dividend; divisor = -divisor; }else{ dividend = dividend<0?-dividend:dividend; divisor = divisor<0?-divisor:divisor; minus = true; } if(dividend==-2147483648){ minValue = true; dividend = dividend-1; } if(divisor==-2147483648){ if(minValue)//被除数与除数相同 return 1; return 0; } } if(dividend<divisor) return 0; if(divisor==1){ if(minus){ if(minValue)//被除数为最大值 return -dividend-1; else return -dividend; } else return dividend; } int index = getBits(dividend); while(index>0){ int val = getBit(dividend,index--); divide = (divide<<1)+val; if(divide<divisor) res = res<<1; else{ res = (res<<1)+1; divide = divide-divisor; } } if(minValue&&(divide+1)>=divisor){ res++; divide = divide+1-divisor; } if(minus){ return -res; } return res; }
相关文章推荐
- 一点一点学架构(二)——继承中的构造函数调用
- Gstreamer/Core: Gstreamer 同步机制
- 【剑指Offer面试题】 九度OJ1513:二进制中1的个数
- 我经过几个创业公司,都是以什么股权来降低工资(警醒自己)
- 网页自适应手机
- 多线程 (一)
- 总线接口与计算机通信(二)SPI总线
- 算法设计--从后向前处理
- MapWinGIS.ocx 注册
- tomcat 绑定 ip 及域名,限制非法域名访问
- 网络访问,返回状态码
- HTML图片和文字一行时的对齐方式
- Stones
- 十一、从头到尾彻底解析Hash 表算法
- MongoDB命令以及使用
- Qt实现16进制unicode转utf-8以及国际音标编码问题
- Treap树
- Hibernate浅析
- 二维数组初始化问题
- python解析xml文件实例分析