leetcode--Divide two integers
2013-08-24 23:09
393 查看
1.题目描述
2.解法分析
不用乘除求模运算,一个很容易让人想到的就是用减法,自然这种算法很费时间,实际上写出一个这样的算法试了一下,TLE。于是剩下的很容易被想到的就是位运算了,这个是基于这样一个观察:
假设除数为B,被除数为A,则有 A = 2k*B+2l*B…(其中k>l 且 2k*B<=A <2k+1*B)
有了这个思路之后实现起来代码很容易,但是有几个问题需要注意:
abs函数里面一定要先对里面待转换的参数显式转换一下,否则当参数的二进制表达最高位为1时转换无用
为防止溢出,要将类型提升到long long ,如果为了节省空间,可以将类型改为unsigned
[code]Divide two integers without using multiplication, division and mod operator. [/code] |
2.解法分析
不用乘除求模运算,一个很容易让人想到的就是用减法,自然这种算法很费时间,实际上写出一个这样的算法试了一下,TLE。于是剩下的很容易被想到的就是位运算了,这个是基于这样一个观察:
假设除数为B,被除数为A,则有 A = 2k*B+2l*B…(其中k>l 且 2k*B<=A <2k+1*B)
class Solution { public: int divide(int dividend, int divisor) { // Start typing your C/C++ solution below // DO NOT write int main() function if(divisor==0)return INT_MAX; long long absDividend=abs((double)dividend); long longabsDivisor=abs((double)divisor); long long result=0; long long maxExpOf2=absDivisor; long long curResult=1; while(absDividend>=absDivisor) { while(absDividend>=(maxExpOf2<<1)) { maxExpOf2=maxExpOf2<<1; curResult=curResult<<1; } absDividend-=maxExpOf2; result+=curResult; maxExpOf2=absDivisor; curResult=1; } if((dividend>0&&divisor>0)||(dividend<0&&divisor<0))return result; else return -result; } }; |
有了这个思路之后实现起来代码很容易,但是有几个问题需要注意:
abs函数里面一定要先对里面待转换的参数显式转换一下,否则当参数的二进制表达最高位为1时转换无用
为防止溢出,要将类型提升到long long ,如果为了节省空间,可以将类型改为unsigned
相关文章推荐
- LeetCode Divide Two Integers
- LeetCode 29 Divide Two Integers(两个整数相除)(*)
- LeetCode : Divide Two Integers [java]
- Divide Two Integers - Leetcode
- [LeetCode] Divide Two Integers 解题报告
- 【LeetCode with Python】 Divide Two Integers
- [Leetcode]29. Divide Two Integers @python
- 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:Divide Two Integers菜鸟解法
- leetcode 29: Divide Two Integers
- Leetcode--Divide Two Integers
- Leetcode 29. Divide Two Integers
- Leetcode: Divide Two Integers
- LeetCode_29---Divide Two Integers