5.divide-two-integers(两个整数相除)
来源:互联网 发布:淘宝淘金币领取 编辑:程序博客网 时间:2024/06/05 02:39
5.divide-two-integers(两个整数相除)
链接:http://www.lintcode.com/zh-cn/problem/divide-two-integers/
将两个整数相除,要求不使用乘法、除法和 mod运算符。
如果溢出,返回 2147483647 。
分析:不能使用乘法、除法、和mod运算符,容易想到使用位运算。被除数可以表示为除数的2的整数幂的形式,显然时间复杂度是log(n)。为了方便,先把两个数都变成正整数,符号位直接由两个数的正负性即可得到。
注意:要考虑到溢出的情况,可分为以下几种,(1)除数为0,则返回INT_MAX,(2),被除数为最小数,若除数为-1,则直接返回INT_MAX,否则被除数加上除数的绝对值,这样被除数加绝对值时,才不会溢出,此时要给商加一,因为从整数的角度看,相当于被除数减掉一个除数(3)除数为INT_MIN,则直接返回商,要么为0,要么为1(此时,被除数也为INT_MIN)。
class Solution {public: /** * @param dividend the dividend * @param divisor the divisor * @return the result */ int divide(int dividend, int divisor) { // Write your code here if(divisor==0) return INT_MAX; int ret=0; if(dividend==INT_MIN) { dividend+=abs(divisor); if(divisor==-1) { return INT_MAX; } ret++; } if(divisor==INT_MIN) return ret; int flag=(dividend<0)^(divisor<0)?-1:1;//符号位 int n=abs(dividend); int m=abs(divisor); int digit=0; while(m<=(n>>1))//digit找出2的整数幂的最大值,它与除数相乘即为m { m<<=1; digit++; } while(digit>=0) { if(n>=m) { ret+=(1<<digit);//2的digit次方 n-=m;//被除数减去m } m=m>>1;//m缩小2倍 digit--;//digit减一,2的整数次方数 } if(flag<0)//控制符号位 ret=-ret; return ret; }};
阅读全文
0 0
- 5.divide-two-integers(两个整数相除)
- Divide Two Integers 两个整数相除
- LeetCode 29 Divide Two Integers(两个整数相除)(*)
- LeetCode OJ 之 Divide Two Integers (两个整数相除)
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- [LeetCode-29] Divide Two Integers(两个整数相除,不用乘除取余算术符)
- LeetCode | Divide Two Integers(两个数相除)
- Leetcode刷题记——29. Divide Two Integers(整数相除Divide two integers without using multiplication, division)
- Leetcode #29 Divide Two Integers 整数相除 解题报告
- leetcode 29 Divide Two Integers(整数相除)
- leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法
- LeetCode (31) Divide two integers (不使用 *, /, mod 求两个数相除结果)
- Divide Two Integers不使用乘除法来计算两个数相除
- Divide Two Integers 两数相除@LeetCode
- LeetCode----29. Divide Two Integers (两数相除)
- Leetcode笔记(7)Divide Two Integers
- 【leetcode-29】Divide Two Integers(C)
- LeetCode(29)Divide Two Integers
- 学习篇:vue组件 与 angularJS 的指令
- Pointwise帮助文件重点学习(未完待续)
- LAMP一键安装教程
- 索引(填坑进度:1%)
- dubbo+zookeeper框架出现Will not attempt to authenticate using SASL (unknown error)
- 5.divide-two-integers(两个整数相除)
- Problem & 2017.6.30
- java中的nio
- 对象转化为json
- Lua脚本:Lua调用C实现方法
- 鼠标滑过图片抖动晃动效果(css/Shake)
- Leetcode--191. Number of 1 Bits
- #5 遍历Hash对象
- 9.偏头痛杨的零基础学Java系列之集合框架入门篇