首页 > 其他 > 详细

【Leetcode】Divide Two Integers

时间:2014-06-06 17:39:03      阅读:407      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     int divide(int dividend, int divisor) {
 4         long long a = dividend < 0 ? -(long long)dividend : dividend;
 5         long long b = divisor < 0 ? -(long long)divisor : divisor;
 6         bool sign = (dividend >= 0 && divisor >= 0) || 
 7                     (dividend <= 0 && divisor <= 0);
 8         long long ans = 0;
 9         while (a >= b) {
10             long long c = b;
11             for (int i = 0; c <= a; c = c << 1, ++i) {
12                 a -= c;
13                 ans += (1 << i);
14             }
15         }
16         return sign ? ans : -ans;
17     }
18 };
View Code

不能用乘、除和取模,那么还可以用加、减和移位。

符号单独考虑。主要从减法出发,可以通过移位加倍被除数从而实现加速。有一点要特别注意的是可能发生溢出,需要用long long类型来进行中间的运算。

【Leetcode】Divide Two Integers,布布扣,bubuko.com

【Leetcode】Divide Two Integers

原文:http://www.cnblogs.com/dengeven/p/3766368.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!