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

【Leetcode】Divide Two Integers

时间:2014-06-06 17:40:07      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   a   

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

标签:c   style   class   blog   code   a   

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

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