zoukankan      html  css  js  c++  java
  • leetcode 29. Divide Two Integers

    题目链接

    计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。

    首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。

    不能使用除法的话, 就只能用减法。  但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。

    class Solution {
    public:
        int divide(int dividend, int divisor) {
            if(dividend == INT_MIN && divisor == -1)
                return INT_MAX;
            if(divisor == 0)
                return INT_MAX;
            unsigned int did = abs(dividend);
            unsigned int dis = abs(divisor);
            int ans = 0;
            while(did >= dis) {
                long long tmp = dis;
                int i;
                for(i = 0; tmp<=did; i++) {
                    tmp <<= 1;
                }
                ans += (1<<(i-1));
                did -= (dis<<(i-1));
            }
            return (dividend>0 ^ divisor>0)?-ans:ans;       //如果异或为0说明同号
        }
    };
  • 相关阅读:
    构建高性能的读服务
    Redis基础入门
    基于TCP实现简单的聊天室
    递归

    Go标准库Cond
    排序(冒泡,选择,插入,快速)
    链表
    队列
    Golang实现RPC
  • 原文地址:https://www.cnblogs.com/yohaha/p/5122773.html
Copyright © 2011-2022 走看看