码迷,mamicode.com
首页 > 其他好文 > 详细

Divide Two Integers 解答

时间:2015-11-06 07:07:56      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

Question

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

Solution

技术分享

dividend = divisor * quotient + remainder

而我们知道对于任何一个数可以表示为Σi * 2x  其中i为0或1。所以我们可以用加法实现乘法。

a = a + a 等同于 a = a * 2

因此我们可以通过对divisor乘以2,求出最大的x,然后继续求出第二大,第三大的x‘, x‘‘..

注意到可能有溢出问题,解决方法是将要计算的所有数先转为long。

 1 public class Solution {
 2     public int divide(int dividend, int divisor) {
 3         boolean negative = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
 4         long a = Math.abs((long)dividend);
 5         long b = Math.abs((long)divisor);
 6         if (a < b) {
 7             return 0;
 8         }
 9         long step, sum, result = 0;
10         while (a >= b) {
11             step = b;
12             sum = 1;
13             while (step + step <= a) {
14                 step += step;
15                 sum += sum;
16             }
17             a = a - step;
18             result += sum;
19         }
20         result = negative == true ? -result : result;
21         if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
22             return Integer.MAX_VALUE;
23         }
24         return (int)result;
25     }
26 }

 

Divide Two Integers 解答

标签:

原文地址:http://www.cnblogs.com/ireneyanglan/p/4941501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!