Leetcode 两数相除
两数相除
题目描述:
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2提示:被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。本题中,如果除法结果溢出,则返回 2^31 − 1。
题目链接
class Solution {public:int divide(int dividend, int divisor) {long long dividendNum = dividend; // long型也会溢出,故只能使用long longlong long divisorNum = divisor;bool sign = true; // 符号位默认为+if(dividendNum>0 && divisorNum<0){divisorNum = -divisorNum;sign = false;}else if(dividendNum<0 && divisorNum>0){dividendNum = -dividendNum;sign = false;}else if(dividendNum<0 && divisorNum<0){dividendNum = -dividendNum;divisorNum = -divisorNum;}if(dividendNum == 2147483648 && divisorNum == 1){ // 32位溢出判断return sign ? INT_MAX:INT_MIN;} int result = 0;if(dividendNum >= divisorNum){ // 处理分母和分子的大小long long temp1 = divisorNum; // long型也会溢出,故只能使用long longint temp2 = 0; // 记录2的幂次while(temp1<<1 <= dividendNum){temp1 = temp1<<1; // 每次乘以2temp2++;}result = 1<<temp2;dividendNum -= temp1;while(dividendNum >= divisorNum){dividendNum -= divisorNum;result++;}}return sign ? result:-result;}
};
如果只是使用一个while循环的思路就会超时,所以题目采用二分查找,即首先通过模糊查找,来找到一个边界[divisor* 2n-1,divisor*2n],使得dividend的值介于这个范围内。此时再从左边界开始while循环精确查找,最后再处理一些边界条件和细节即可。
Leetcode 两数相除相关推荐
- LeetCode两数相除java
这是力扣上的一道题,参考评论区. 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divi ...
- 两数相除之分析问题解决问题
分析解决问题 前言 一.两数相除 二.位运算 总结 参考文献 前言 做题不要杂乱无章的想,单凭记忆去模仿,而是要抓住问题中所给的你认为的关键,去分析,去找方法解决. 一.两数相除 二.位运算 pack ...
- LeetCode 29. 两数相除(位运算)
1. 题目 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示 ...
- leetcode —— 29. 两数相除
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数除法的结果 ...
- leetcode 29.两数相除
leetcode 29.两数相除 题目描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 ...
- leetcode题解:两数相除
题目描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数 ...
- LeetCode高频题29. 两数相除:不用加减乘除号,求加法,减法,乘法,除法
LeetCode高频题29. 两数相除 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛 ...
- Leetcode 29:两数相除(超详细的解法!!!)
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- Java实现 LeetCode 29 两数相除
29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商 ...
最新文章
- native2ascii插件配置
- 入侵检测系统基础知识
- C++和Rust_【Rust水群夜话】盘点Rust 官方团队2019年进展
- C#下载文件(可显示进度)的方法实现
- html 输入框从左上角,在输入框的左上角,使文本开始_input_开发99编程知识库
- ES6模块之export和import详解
- 国庆档票房近50亿创纪录 背后影视股却遭遇集体下跌
- python爬虫教程-Python爬虫入门教程——爬取自己的博客园博客
- 电脑、手机 自动化 键鼠操作( 类似按键精灵 )
- extjs引入html,ExtJs教程第一集 搭建ext环境后的第一个hello World
- 2018年版计算机技术类北大中文核心期刊目录
- windows11,安装maven。
- mac 安装pip教程
- elasticsearch使用中文分词器和拼音分词器,自定义分词器
- IE浏览器怎么查看cookie
- 万年历(hao123)代码
- 荣耀MagicOS 7.0正式发布;快手科技2022年第三季度收入同比增长12.9% | 美通企业日报...
- qml中Popup元素的 aboutToShow和 opened()的区别
- 以不变应万变:因果启发的稳定学习年度研究进展(上篇)
- 还是学生的时候 想着存些对我有用 的url