【leetcode-29】Divide Two Integers(C)
来源:互联网 发布:淘宝网首页女装春装 编辑:程序博客网 时间:2024/06/05 00:25
问题描述:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析:这道题不允许用*/和%运算,因此只能模拟计算机对乘除法的做法来进行。请参考另外一篇博客:这里写链接内容另外,这道题最恶心的是一些边界值。如被除数为-2147483648;除数为:-2147483648;或者为+1,-1等等情况。
代码如下:4ms
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;}
0 0
- 【leetcode-29】Divide Two Integers(C)
- LeetCode(29)Divide Two Integers
- LeetCode (29)Divide Two Integers
- leetcode 29: Divide Two Integers
- LeetCode(29)Divide Two Integers
- [leetcode 29] Divide Two Integers
- [leetcode] 29 Divide Two Integers
- leetcode 29 Divide Two Integers
- Leetcode 29 Divide Two Integers
- LeetCode 29 - Divide Two Integers
- leetcode 29 -- Divide Two Integers
- leetcode 29:Divide Two Integers
- leetcode 29: Divide Two Integers
- Leetcode#29 Divide Two Integers
- LeetCode(29)Divide Two Integers
- LeetCode-29 Divide Two Integers
- Leetcode#29||Divide Two Integers
- leetcode-29 Divide Two Integers
- Android—shape画虚线
- Window 查指定端口并杀进程
- mongoDB 入门指南、示例
- 第二十三、四章:杨氏矩阵查找,倒排索引关键词Hash不重复编码实践
- 一点一点学架构(二)——继承中的构造函数调用
- 【leetcode-29】Divide Two Integers(C)
- 自定义控件(一)
- Android中的Handler的post方法详解
- Oracle到SAP HANA实时复制系列(三):Replication Agent的安装与配置
- AppDelegate中方法执行的时机
- cocos2dx3.2 Label 自动换行,各种label创建方式,描边,阴影,发光等;
- 解决ScrollView下嵌套ListView/GridView进页面不在顶部的问题以及数据显示不全的问题( 只显示一行)
- hdu 4149 magic potion 位运算
- MongoDB数据类型