zoukankan      html  css  js  c++  java
  • 【LeetCode】029. Divide Two Integers

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

    If it is overflow, return MAX_INT.

    题解:

      思路就是被除数减去除数,减尽为止。优化的方法是尽量少的做减法。由于不能用乘法,可以利用位操作,左移一位即为该数乘上2

    Solution 1

     1 class Solution {
     2 public:
     3     int divide(int dividend, int divisor) {
     4         if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX;
     5         long long m = abs((long long)dividend);  
     6         long long n = abs((long long)divisor);  
     7         
     8         int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
     9         int res = 0;
    10         while (m >= n) {
    11             long long tmp = n, p = 1;
    12             while (m >= (tmp << 1)) {
    13                 tmp <<= 1;
    14                 p <<= 1;
    15             }
    16             m -= tmp;
    17             res += p;
    18         }
    19         return sign == 1 ? res : -res;
    20     }
    21 };

     Solution 2 

     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         unsigned dvd = abs(dividend);
     8         unsigned dvs = abs(divisor);
     9         int res = 0;
    10         while (dvd >= dvs) {
    11             unsigned temp = dvs, multiple = 1;
    12             // 不可写作 dvd >= (tmp << 1),因为有可能溢出
    13             while (dvd - temp >= temp) { 
    14                 temp <<= 1;
    15                 multiple <<= 1;
    16             }
    17             dvd -= temp;
    18             res += multiple;
    19         }
    20         return sign * res;
    21     }
    22 };
  • 相关阅读:
    JAVA 分布式
    Spring Boot -01- 快速入门篇(图文教程)
    MyBatis -01- 初识 MyBatis + MyBatis 环境搭建
    Vue 框架-12-Vue 项目的详细开发流程
    Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置
    Vue 框架-10-搭建脚手架 CLI
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/Atanisi/p/8648060.html
Copyright © 2011-2022 走看看