zoukankan      html  css  js  c++  java
  • Divide Two Integers -- LeetCode

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

    If it is overflow, return MAX_INT.

    思路:

    采用位运算。我们先将两个数都看作是正数。

    我们将除数左移一位就是将它扩大2倍,左移两位就是扩大4倍,一直左移到再左移一次就会大于被除数为止。

    为了记录扩大了多少倍,用一个变量multi = 1也跟着一起左移。

    然后用被除数减去扩大后的除数,若结果仍然大于等于原来的除数,则再重复刚才的过程。每次循环中结果都加上multi的值。

    这个题中有两种情况可能溢出:

    1. 除数是0.

    2. 被除数是INT_MIN, 除数是-1。因为INT_MIN(-2147483648, -2^31)的绝对值比INT_MAX(2147483647, 2^31-1)要大一。

     1 class Solution {
     2 public:
     3     int divide(int dividend, int divisor) {
     4         if (!divisor || (dividend == INT_MIN && divisor == -1))
     5             return INT_MAX;
     6         int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
     7         long long dvd = (long long)labs(dividend);
     8         long long dvs = (long long)labs(divisor);
     9         int res = 0;
    10         while (dvd >= dvs)
    11         {
    12             long long tem = dvs, mul = 1;
    13             while (dvd >= (tem << 1))
    14             {
    15                 tem <<= 1;
    16                 mul <<= 1;
    17             }
    18             dvd -= tem;
    19             res += mul;
    20         }
    21         return sign * res;
    22     }
    23 };
  • 相关阅读:
    vivado操作基本问题
    IIC通信控制的AD5259------在调试过程中遇到的奇葩问题
    FPGA基础架构总结
    PLL到底是个啥么东西呢?
    CSS-3 Transform 的使用
    CSS-3 box-shadow 的使用
    一些CSS3的乐趣
    CSS-3 文字阴影—text-shadow 的使用
    Jquery 较好的效果
    如何关闭输入法
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5170502.html
Copyright © 2011-2022 走看看