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 };
  • 相关阅读:
    类class解读
    函数重载
    for循环之省略{}
    《c++程序设计现代方法》笔记2
    【程序】c++雇员工资管理系统
    贪婪法
    乘法口诀程序
    百钱买百鸡问题程序
    【转】牛人十个月自学C++ 现在做C#开发工作
    c++基本规则习惯
  • 原文地址:https://www.cnblogs.com/Atanisi/p/8648060.html
Copyright © 2011-2022 走看看