不禁让我想起了计算机是怎样进行除法运算的,单独考虑溢出以及边界情况,单独考虑符号,其他过程和我们小学除法是一模一样的:左移除数(十进制就是扩大十倍,二进制扩大两倍),直到正好比被除数小,一边累加商(在我的代码里就是33行)一边减小被除数,直到被除数不能减小,右移除数,重复上述过程。

 1 public int divide(int dividend, int divisor) {
2 if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;
3 if (dividend == Integer.MIN_VALUE && divisor == Integer.MIN_VALUE) return 1;
4 if (divisor == Integer.MIN_VALUE) return 0;
5
6 int ans = 0, neg = 0;
7 if (dividend == Integer.MIN_VALUE) {
8 if (divisor < 0) dividend -= divisor;
9 else dividend += divisor;
10 ans++;
11 if (dividend >= 0) neg ^= 1;
12 }
13 if (dividend < 0) {
14 neg ^= 1;
15 dividend *= -1;
16 }
17 if (divisor < 0) {
18 neg ^= 1;
19 divisor *= -1;
20 }
21 if (dividend < divisor) return neg == 1 ? -ans : ans;
22
23 int res = 1;
24 while (divisor <= dividend / 10) {
25 divisor *= 10;
26 res *= 10;
27 if (dividend == divisor && dividend == 0) return neg == 1 ? -ans : ans;
28 }
29
30 while (divisor != 0) {
31 while (dividend >= divisor) {
32 dividend -= divisor;
33 ans += res;
34 }
35 while (dividend < divisor) {
36 divisor /= 10;
37 res /= 10;
38 }
39 }
40 return neg == 1 ? -ans : ans;
41 }

LeetCode 29. 两数相除 时间击败【100.00%】 内存击败【76.25%】的更多相关文章

  1. Java实现 LeetCode 29 两数相除

    29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商 ...

  2. Leetcode 29.两数相除 By Python

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  3. LeetCode 29 - 两数相除 - [位运算]

    题目链接:https://leetcode-cn.com/problems/divide-two-integers/description/ 给定两个整数,被除数 dividend 和除数 divis ...

  4. leetcode 29 两数相除

    问题描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 ...

  5. [LeetCode]29 两数相除和一个小坑点

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  6. LeetCode 29——两数相除

    1. 题目 2. 解答 2.1. 方法一 题目要求不能使用乘法.除法和除余运算,但我们可以将除法转移到对数域. \[ \frac{a}{b} = e^{\frac{lna}{lnb}} = e^{ln ...

  7. leetcode 29两数相除

    我理解本题是考察基于加减实现除法,代码如下: class Solution { public: //只用加减号实现除法, //不用加减号实现除法: int divide(int dividend, i ...

  8. 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除

    剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...

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

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

  10. LeetCode(29): 两数相除

    Medium! 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor ...

随机推荐

  1. 去除Bam文件中的PCR 重复

    1.使用samtools 去除重复 samtools sort -n -@ 20 file.bam |samtools fixmate -m -@20 - - |samtools sort -@ 20 ...

  2. 以EEPROM为例的硬件IIC的使用

    目录 参考调试MPU6050与EEPROM的经验,整合了目标内存/寄存器地址是否为16位的情况,合并了单字节与多字节间的操作,添加了返回值与读写超时功能:硬件IIC的7位从机地址查询方式读写参考代码 ...

  3. xampp安装使用

    xampp安装使用 安装 下载xampp bin文件 xampp-linux-x64-8.0.0-3-installer.run 安装 sudo ./xampp-linux-x64-8.0.0-3-i ...

  4. 080_Dataloader.io

    图中是之前使用的Dataloader,关于Lookup字段可以不使用ID,用ID对应的Name进行匹配,如图

  5. 074_Wrapper_Class

    https://developer.salesforce.com/page/Wrapper_Class http://www.sfdcpoint.com/salesforce/wrapper-clas ...

  6. Angular单页应用程式 (SPA)+Azure AD重新导向登入

    一.app.module.ts中设定应用程式 1.将MSAL Angular相关设置封装为auth.module.ts import { NgModule } from '@angular/core' ...

  7. HCIP-ICT实战进阶07-BGP路由选路

    HCIP-ICT实战进阶07-BGP路由选路 1 BGP路径属性 任何一条BGP路由拥有多个路径属性; 当路由器将BGP路由拥有通告他的对等体时, 在Update报文中一并被通告的还有路由所携带的各个 ...

  8. 电脑安装不同版本的QT

    系统:windows Qt版本:5.10/5.13 电脑中已经安装5.10版本的,安装5.13版本的不知道是否会出现问题,故此记录. 下载安装Qt5.13,安装过程跟之前版本的基本没差别,安装路径 D ...

  9. lua module以及模块内的local function使用

    在模块定义local function,使用local function时,需要在使用前就定义,不能通过self:localfunction 或者self.locakfunction 因为是模块内的局 ...

  10. 关于nginx隐藏index.php入口文件注意事项

    最近项目用的是nginx服务,apache怎么隐藏入口不赘述,官方文档有介绍,Nginx隐藏官方文档这样说的: 实践中,这样是不对的,应该在网站对应的vhost.conf中配置: server { l ...