LeetCode_OJ【29】Divide Two Integers
2015-09-21 10:12
316 查看
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
这题运用移位轻松解决,但是要注意是否会溢出,在会不会溢出这里我卡了好久。
int占4字节,表示范围为-2^31 ~ 2^31-1。
程序首先要将除数与被除数都变成正数,当这两个数中有一个数为int_min的时候,取反直接溢出,所以在取反前就得强制转换为long
结果计算完成之后判断是否溢出再做相应处理。
下面该题目的java代码实现。
public class Solution {
public int divide(int dividend, int divisor) {
long a = dividend >=0 ? dividend : -(long)dividend;
long b = divisor >=0 ? divisor : -(long)divisor;
long result = 0;
while(a >= b){
long c = b ;
for(int i = 0 ; a >= c ;i++, c<<=1){
a -= c;
result += (1 << i);
}
}
if((dividend^divisor)>>31 != 0)
result = - result;
if(result > Math.pow(2, 31) -1)
return (int)(Math.pow(2, 31) -1);
else if(result < -Math.pow(2, 31))
return -(int)Math.pow(2, 31);
else
return (int)result;
}
}
If it is overflow, return MAX_INT.
这题运用移位轻松解决,但是要注意是否会溢出,在会不会溢出这里我卡了好久。
int占4字节,表示范围为-2^31 ~ 2^31-1。
程序首先要将除数与被除数都变成正数,当这两个数中有一个数为int_min的时候,取反直接溢出,所以在取反前就得强制转换为long
结果计算完成之后判断是否溢出再做相应处理。
下面该题目的java代码实现。
public class Solution {
public int divide(int dividend, int divisor) {
long a = dividend >=0 ? dividend : -(long)dividend;
long b = divisor >=0 ? divisor : -(long)divisor;
long result = 0;
while(a >= b){
long c = b ;
for(int i = 0 ; a >= c ;i++, c<<=1){
a -= c;
result += (1 << i);
}
}
if((dividend^divisor)>>31 != 0)
result = - result;
if(result > Math.pow(2, 31) -1)
return (int)(Math.pow(2, 31) -1);
else if(result < -Math.pow(2, 31))
return -(int)Math.pow(2, 31);
else
return (int)result;
}
}
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解