两数相除

题目描述:

给定两个整数,被除数 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 两数相除相关推荐

  1. LeetCode两数相除java

    这是力扣上的一道题,参考评论区. 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divi ...

  2. 两数相除之分析问题解决问题

    分析解决问题 前言 一.两数相除 二.位运算 总结 参考文献 前言 做题不要杂乱无章的想,单凭记忆去模仿,而是要抓住问题中所给的你认为的关键,去分析,去找方法解决. 一.两数相除 二.位运算 pack ...

  3. LeetCode 29. 两数相除(位运算)

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

  4. leetcode —— 29. 两数相除

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

  5. leetcode 29.两数相除

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

  6. leetcode题解:两数相除

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

  7. LeetCode高频题29. 两数相除:不用加减乘除号,求加法,减法,乘法,除法

    LeetCode高频题29. 两数相除 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛 ...

  8. Leetcode 29:两数相除(超详细的解法!!!)

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

  9. Java实现 LeetCode 29 两数相除

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

最新文章

  1. native2ascii插件配置
  2. 入侵检测系统基础知识
  3. C++和Rust_【Rust水群夜话】盘点Rust 官方团队2019年进展
  4. C#下载文件(可显示进度)的方法实现
  5. html 输入框从左上角,在输入框的左上角,使文本开始_input_开发99编程知识库
  6. ES6模块之export和import详解
  7. 国庆档票房近50亿创纪录 背后影视股却遭遇集体下跌
  8. python爬虫教程-Python爬虫入门教程——爬取自己的博客园博客
  9. 电脑、手机 自动化 键鼠操作( 类似按键精灵 )
  10. extjs引入html,ExtJs教程第一集 搭建ext环境后的第一个hello World
  11. 2018年版计算机技术类北大中文核心期刊目录
  12. windows11,安装maven。
  13. mac 安装pip教程
  14. elasticsearch使用中文分词器和拼音分词器,自定义分词器
  15. IE浏览器怎么查看cookie
  16. 万年历(hao123)代码
  17. 荣耀MagicOS 7.0正式发布;快手科技2022年第三季度收入同比增长12.9% | 美通企业日报...
  18. qml中Popup元素的 aboutToShow和 opened()的区别
  19. 以不变应万变:因果启发的稳定学习年度研究进展(上篇)
  20. 还是学生的时候 想着存些对我有用 的url

热门文章

  1. 结构体的对其规则以及为什么要对其
  2. 模型加速:深度学习模型的硬件加速:NVIDIAT240
  3. Excel+VBA处理高斯光束
  4. Oracle自增字段的创建(转)
  5. 配置 Site-to-Site and Extranet ×××
  6. ArcGIS Server10.4安装教程
  7. 新手shopee开店打造引流款其实很简单,三个步骤教你如何打造爆款
  8. DIP(Dual in-line package)封装
  9. 古色古香、清雅幽韵之站点一览
  10. 通过syslog协议发送日志信息到日志审计系统(配置logback-spring.xml方式)