414-两个整数相除

将两个整数相除,要求不使用乘法、除法和 mod 运算符。

如果溢出,返回 2147483647 。

样例

给定被除数 = 100 ,除数 = 9,返回 11。

标签

二分法

思路

不用乘除法和模运算求来做除法,很容易想到的一个方法是一直做减法,然后计数,除此之外,一种更快速的方法是:

利用位运算,意思是任何一个整数可以表示成以2的幂为底的一组基的线性组合,即 num = a_02^0 + a_12^1 + a_22^2 + … + a_n2n。基于以上这个公式以及左移一位相当于乘以2,我们先让除数左移直到大于被除数之前得到一个最大的基n的值,说明被除数中至少包含2n个除数,然后减去这个基数,再依次找到n-1,…,1的值。将所有的基数相加即可得到结果。

code

class Solution {
public:
/*
* @param dividend: the dividend
* @param divisor: the divisor
* @return: the result
*/
int divide(int dividend, int divisor) {
// write your code here
bool isNeg = false;
if (dividend > 0 && divisor < 0 || dividend < 0 && divisor > 0) {
isNeg = true;
}
long long result = 0;
long long d1 = abs((long long)dividend);
long long d2 = abs((long long)divisor);
while (d1 >= d2) {
long long temp = d2;
long long cnt = 1;
while (d1 >= temp) {
d1 -= temp;
result += cnt;
cnt = cnt << 1;
temp = temp << 1;
}
}
if (isNeg) {
result *= -1;
}
if (result < INT_MIN || result > INT_MAX) {
return INT_MAX;
}
return result;
}
};

lintcode-414-两个整数相除的更多相关文章

  1. C#中两个整数相除得到带小数点的结果

    有时候需要将两个整数相除,获得带小数点的float类型数.例如一个整数12345,需要变成123.45.常见与串口与硬件通讯,DSP处理浮点型比较麻烦,DSP传递来的温度等数据都以整型的方式传递,串口 ...

  2. Java 两个整数相除保留两位小数,将小数转化为百分数

    Java 两个整数相除保留两位小数,将小数转化为百分数 源于:http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html 后来学习了:http://blo ...

  3. java实现两个整数相除保留一位小数

    //整数相除 保留一位小数 public static String division(int a ,int b){ String result = ""; float num = ...

  4. java 对象转整数,两个整数相除转百分数

    public class MathUtil { public static void main(String[] args) { System.out.println(toPercent(1,3)); ...

  5. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑

    先来看一个例子: package com.test; public class calculate { /** * 光速30万公里/秒 */ public static final int LIGHT ...

  6. Java两个整数相除保留n位小数

    方式1:被除数转double后,除以除数,结果是一个double类型的数,将double结果按要求保留n位小数即可. 保留n位小数的写法 int a = 10; int b = 3; double r ...

  7. python两个整数和浮点的方法来获取值

    /*********************************************************************  * Author  : Samson  * Date   ...

  8. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)

    1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 136[Submit][Status ...

  9. JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)

    1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...

随机推荐

  1. Redis开启远程访问及密码认证

    配置 redis.conf 文件 [root@localhost bin]# vi /usr/local/redis/bin/redis.conf 将 bind 127.0.0.1 注释掉 将 pro ...

  2. mysql-5.7.24 在centos7安装

    搭建环境:mysql5.7.24  CentOS-7-x86_64-DVD-1804.iso  桌面版 1. 进入官网:https://dev.mysql.com/downloads/mysql/ 该 ...

  3. 树莓派3B+学习笔记:4、查看GPIO

    GPIO(General Purpose I/O Ports)意思为通用输入/输出端口. 可以在终端重直接查看GPIO的定义. 查看方式1: gpio readall 查看方式2: pinout 可以 ...

  4. 树莓派 ubuntu16.04 安装SSH 配置SSH 开机自启SSH

    入手个树莓派3B 装了 ubuntu 16.04 需要用到SSH 记录下 0.先获得树莓派IP 树莓派 使用网线连接路由器和树莓派 在路由器设置页面(一般是192.168.1.1具体看路由器的型号和设 ...

  5. 20155204 2016-2017-2《Java程序设计》课程总结

    20155204 2016-2017-2<Java程序设计>课程总结 目录 作业链接汇总 作业总结 实验报告链接汇总 代码托管链接 课堂项目实践 学习经验 问卷调查 链接二维码 (按顺序) ...

  6. Vue视图

    1. 基本模板语法 1.1 插值 文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值 v-text 指令也可以用于数据绑定,如果要更新部分的 textContent ...

  7. 详解UML图之类图

    产品经理的必备技能之一是画UML图,本文就告诉你怎么画标准的类图吧.本文结合网络资料和个人心得所成,不当之处,请多指教. 1.为什么需要类图?类图的作用 我们做项目的需求分析,最开始往往得到的是一堆文 ...

  8. [Bootstrap 源码解析]——bootstrap源码之初始化

    bootstrap源码之初始化 我们先来分析normalize.less编译后的源码,我们知道normalize.css是一个专门将不同浏览器的默认css特性设置为统一效果的css库,它和reset. ...

  9. 【MySQL数据库权限】RDS for MySQL创建高权限账号

    原文转自:https://help.aliyun.com/document_detail/26130.html?spm=5176.2020520104.201.1.580be8abjlGorJ 为满足 ...

  10. nuget必备插件(待续)

    DevLib.ExtensionMethods Extend Z.ExtensionMethods