lintcode-414-两个整数相除
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-两个整数相除的更多相关文章
- C#中两个整数相除得到带小数点的结果
有时候需要将两个整数相除,获得带小数点的float类型数.例如一个整数12345,需要变成123.45.常见与串口与硬件通讯,DSP处理浮点型比较麻烦,DSP传递来的温度等数据都以整型的方式传递,串口 ...
- Java 两个整数相除保留两位小数,将小数转化为百分数
Java 两个整数相除保留两位小数,将小数转化为百分数 源于:http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html 后来学习了:http://blo ...
- java实现两个整数相除保留一位小数
//整数相除 保留一位小数 public static String division(int a ,int b){ String result = ""; float num = ...
- java 对象转整数,两个整数相除转百分数
public class MathUtil { public static void main(String[] args) { System.out.println(toPercent(1,3)); ...
- Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
先来看一个例子: package com.test; public class calculate { /** * 光速30万公里/秒 */ public static final int LIGHT ...
- Java两个整数相除保留n位小数
方式1:被除数转double后,除以除数,结果是一个double类型的数,将double结果按要求保留n位小数即可. 保留n位小数的写法 int a = 10; int b = 3; double r ...
- python两个整数和浮点的方法来获取值
/********************************************************************* * Author : Samson * Date ...
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 177 Solved: 136[Submit][Status ...
- JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)
1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...
随机推荐
- MongoDB基础教程
MongoDB 一.下载MongoDB数据库 1.进入MongoDB官网进行下载,网址:https://www.mongodb.com/. 2.下载完成后可进行安装,安装后,并有了MongoDB服务. ...
- 在Windows下编译mongo-c-driver 1.3.x
在Windows下编译mongo-c-driver 1.3.x 在Windows下编译mongo-c-driver 1.3.x 1.安装 MSYS2https://sourceforge.net/pr ...
- MySQL优化#参数配置优化
( 1).查看mysql里的线程,观察是否有长期运行或阻塞的sql: show full processlist 经查看,没有发现相关线程,可排除该原因 (2).疑似mysql连接使用完成后没有真正释 ...
- 从零开始搭建vue移动端项目到上线的步骤
初始化项目 1.在安装了node.js的前提下,使用以下命令 npm install --g vue-cli 2.在将要构建项目的目录下 vue init webpack myproject(项目目录 ...
- 10.11课后练习——MyOD系统调用版本
MyOD系统调用版本 题目要求 参考教材<深入理解计算机(第三版)>第十章内容 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XX ...
- 【私人向】Java复习笔记
此笔记学习于慕课网:Java入门第一季-第三季,想学的可以点击链接进行学习,笔记仅为私人收藏 建议学习时间:2-3天(极速版) 数据类型 基本数据类型存的是数据本身 引用类型变量(class.inte ...
- 20155327《Java程序设计》第二周学习总结
<Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...
- 实验一 Java开发环境的熟悉(Linux+Eclipse)
实验一 Java开发环境的熟悉(Linux+Eclipse) 在Linux或Window或macOS中命令行下运行Java 在Linux 或Window或 macOS环境中 IDEA中调试设置断点 实 ...
- 20155339 《Java程序设计》实验五网络编程与安全实验报告
20155339 <Java程序设计>实验五网络编程与安全实验报告 实验内容 实验一 1.两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/67667 ...
- [agc003F]Fraction of Fractal
Description 传送门 Solution 本篇博客思路来自大佬的博客(侵删). 我们定义如果网格的第一行和最后一行的第i列都为黑色,则它是一个上下界接口.左右界接口定义同上. 如果上下界接口和 ...