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

    1. Divide Two Integers My Submissions QuestionEditorial Solution
      Total Accepted: 66073 Total Submissions: 421509 Difficulty: Medium
      Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.
    思路:每次减去b(同时b不断的翻倍,从1,2,2^2…)
    为什么这样是可行的,因为如果a=nb+x
    那么n作为一个整数一定是可以表示成 2m+2m1+...+21+20
    所以从20,21

    #define IMAX numeric_limits<int>::max()
    #define IMIN numeric_limits<int>::min()
    class Solution {
         public:
              int divide(int dividend,int divisor) {
                assert(divisor!=0);
                int sign = (dividend<0&&divisor>0||dividend>0&&divisor<0)?-1:1;
                unsigned int a = dividend<0?-dividend:dividend;
                unsigned int b = divisor<0?-divisor:divisor;
                unsigned int c = b;
                int multi=0;
                while(a>=b){
                    int i=1;    
                    while(a>=b){
                        a -=b;
                        multi+=i;
                        if(b<IMAX>>1){
                            b=b<<1;
                            i<<=1;
                        }
                    }
                    b=c;    
                }
                if(sign>0&&multi==IMIN)return IMAX;
                else return multi*sign;
          }
    };
  • 相关阅读:
    python 的rjust函数
    二叉树
    实验四 系统调用
    实验三:跟踪分析Linux内核的启动过程
    ZigZag Conversion1
    Oracle数据文件管理
    Java中hashcode,equals和==
    浅析Java中HashMap的实现
    迷宫(栈,堆,队列)
    TCP/IP的三次握手协议
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482899.html
Copyright © 2011-2022 走看看