用加减法模拟除法。

除法本质就是 被除数 - 商个除数相加 = 0

如果你电脑足够好,可以无限减。。但是这个题肯定不是这么简单。

最快的方法还是 减去 商乘以除数。

但是这里不能使用乘法,那只好用BIT的运算来实现了。

自己没做出来,但是发现一刷做出来了,怎么看都不像是我这个智商能写出来的,所以不知道当时看的哪的答案,贴出的答案如有冒犯,请告之。

比如19/3,只要分子比分母大,就可以除。

19 比 3大, 比2个还3大,牛逼牛逼,比4个3大,你敢信?比8个3小。。

那么19先减去4个3肯定没错,此时分子是19-4*3=7;结果是4,已经4个3了。

然后再看7/3,7比1个3大,比2个3大,那么分子就是7-2*3 = 1,结果是2+刚才的4=6。

然后1/3,比3小了,让你装逼。此时停止,结果是第一次的2+刚才的4=6.

所以就是通过BIT位操作来看剩下的分子比几个分母大,正常乘法是1234567个这么测试,测1次就行了,但是用BIT是测很多次,每次1248个,最后相加。

然后各种edge case好贱。

public class Solution {
public int divide(int dividend, int divisor)
{
if(dividend == 0) return 0; long up = (long)dividend;
long down = (long)divisor; boolean pos = (up*down) >= 0;
up = Math.abs(up);
down = Math.abs(down); long res = 0;
while(up >= down)
{
int numOfDowns = 1; while(up > (down<<1))
{ down <<= 1;
numOfDowns <<= 1; } up -= down;
res += (long)numOfDowns;
down = Math.abs((long)divisor);
} if(res == (long)Integer.MIN_VALUE*(-1) && pos) return Integer.MAX_VALUE;
if(pos) return (int)res;
else return (int)res*-1;
}
}

29. Divide Two Integers的更多相关文章

  1. [Leetcode][Python]29: Divide Two Integers

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 29: Divide Two Integershttps://oj.leetc ...

  2. 29. Divide Two Integers - LeetCode

    Question 29. Divide Two Integers Solution 题目大意:给定两个数字,求出它们的商,要求不能使用乘法.除法以及求余操作. 思路:说下用移位实现的方法 7/3=2, ...

  3. [LeetCode] 29. Divide Two Integers 两数相除

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  4. Java [leetcode 29]Divide Two Integers

    题目描述: Divide two integers without using multiplication, division and mod operator. If it is overflow ...

  5. 【一天一道LeetCode】#29. Divide Two Integers

    一天一道LeetCode系列 (一)题目 Divide two integers without using multiplication, division and mod operator. If ...

  6. 29. Divide Two Integers (JAVA)

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  7. [leetcode]29. Divide Two Integers两整数相除

      Given two integers dividend and divisor, divide two integers without using multiplication, divisio ...

  8. [LeetCode] 29. Divide Two Integers(不使用乘除取模,求两数相除) ☆☆☆

    转载:https://blog.csdn.net/Lynn_Baby/article/details/80624180 Given two integers dividend and divisor, ...

  9. [leetcode]29. Divide Two Integers 两整数相除

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  10. 29. Divide Two Integers (INT; Overflow, Bit)

    Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...

随机推荐

  1. java经典题目练习-第八题简单实现方式...

    *[程序8]*题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.* 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 思考: 对于以上 ...

  2. android入门到熟练(一)

    1.andro系统架构:Linux内核层(提供驱动),系统运行库层和android运行时库(提供C/C++库的主要特性,如SQLite,OpenGL,Webkit等和Dalvik虚拟机),应用框架层, ...

  3. 【elasticsearch】(1)centos7 使用yum安装elasticsearch 2.X

    前言 elasticsearch(下面称为ES)是一个基于Lucene的搜索服务器(By 百度百科:查看).所以他需要java的环境即jdk,这里提供懒人一键安装方式 # yum install ja ...

  4. chromium安装flash

    sudo apt-get install pepperflashplugin-nonfree sudo update-pepperflashplugin-nonfree --install Flash ...

  5. memcached在linux安装

    服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了lib ...

  6. Python 基础-python-列表-元组-字典-集合

    列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...

  7. python 简单谈谈“类”

    文章出处:http://www.cnblogs.com/winstic/,请保留此连接 面向对象是python语言的一大特色,而类又是面向对象编程的核心 先来一段关于类的声明: class myCla ...

  8. uboot全局变量

    一.global_data(include/asm-arm/global_data.h) typedef struct global_data { bd_t *bd; unsigned long fl ...

  9. Java网络编程--echo服务器

    客户端使用Java的阻塞IO 服务端使用Java的非阻塞NIO package com.nio.echo; import java.io.IOException; import java.io.Inp ...

  10. iReport中求和的问题

    数据库取出值TAX_AMT,但是不想在数据库里面计算,太麻烦,后面group by 字段太多.那就放到ireport里面去计算咯 在字段的如下位置进行计算吧.