这是力扣上的一道题,参考评论区。

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

返回被除数 dividend 除以除数 divisor 得到的商。
示例 1:

输入: dividend = 10, divisor = 3 输出: 3

示例 2:

输入: dividend = 7, divisor = -3 输出: -2

说明:

1、被除数和除数均为 32 位有符号整数。
2、 除数不为 0。
3、假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 −1]。本题中,如果除法结果溢出,则返回 231 − 1。

主要思想是将除法变成减法,判断符号位用异或运算,都变成负数方便处理(最后结果看符号位是false表示是正数,加上-),主要是两个while,外侧看被除数还能否减去除数,内侧则是以x2方式增加除数大小,这里要注意i=-2147483648;j=-1这个用例。

public class 两数相除191208 {public static int fun(int dividend, int divisor) {// 符号位 异号为trueboolean negative = (dividend ^ divisor) < 0;// 都变成负数int result = 0;if (dividend > 0) {dividend = -dividend;}if (divisor > 0) {divisor = -divisor;}// 外循环直到被除数不能再减除数。while (dividend <= divisor) {int result_temp = -1;int divisor_temp = divisor;// 内循环找可以被除数x2除的,这样快点,二分?while (dividend <= (divisor_temp << 1)) {// int i = -2147483648;// int j = -1;// 上面用例会使除数temp溢出为0,然后死循环。下面if排除该情况if (divisor_temp <= (Integer.MIN_VALUE >> 1)) {break;}divisor_temp = divisor_temp << 1;result_temp = result_temp << 1;}dividend -= divisor_temp;result += result_temp;}// 不是异号加个符号,超出最小值返回最大值if (!negative) {if (result <= Integer.MIN_VALUE) {return Integer.MAX_VALUE;}result = -result;}return result;}public static void main(String[] args) {int i = -2147483648;int j = -1;int res = fun(i, j);System.out.println(res);}

LeetCode两数相除java相关推荐

  1. ※29. 两数相除(java)

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

  2. Leetcode 两数相除

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

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

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

  4. Java实现 LeetCode 29 两数相除

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

  5. [Leetcode][JAVA]第[29]题[两数相除][二分法]

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

  6. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  7. LeetCode 27移除元素28实现strStr()29两数相除

    维护幸苦,如有打卡欢迎关注公众号bigsai回复进群,如有帮助欢迎点赞支持! 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长 ...

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

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

  9. leetcode —— 29. 两数相除

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

最新文章

  1. python编程100例画图-python 画图示例源码(Turtle Graphics)
  2. C语言main函数、return、exit函数
  3. 订单自动生成器的算法研究与实现
  4. leader选举的源码分析-quorumPeer.createElectionAlgorithm
  5. POJ-1861-Network 解题报告
  6. 【kafka】kafka 启动报错 InvalidReceiveException: Invalid receive (size = -720899)
  7. dbforge studio for oracle,dbForge Studio for Oracle(数据库管理软件)官方版
  8. 简单的图论问题【湖南省赛】
  9. JavaWeb那些事儿(一)--为什么做java的web开发使用struts2,springMVC和spring这样的框架
  10. 正则化regularization
  11. java类和对象数组传参_Java 练习(替换数组元素, 将对象作为参数传递给方法)
  12. skimage io.imread
  13. 拓端tecdat|R语言Bootstrap的岭回归和自适应LASSO回归可视化
  14. 对称密钥密码体制的主要特点
  15. FTP网络服务器 Xlight+FlashFXP
  16. 180422 3步法Windows10引导Ubuntu开机启动
  17. 华芯微特SWM220R8T7-LQ64-22100最小系统板测试版开发板面包板
  18. C++_输入一个字符串,并逆序输出
  19. Python与医疗图像3
  20. 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字

热门文章

  1. freertos 创建互斥量_freertos任务通信
  2. 计算机二级考试c语言冲刺,计算机二级C语言考试冲刺练习题
  3. 新浪微博登陆以及发送微博(附python源码)
  4. Bootstrap补充
  5. 使用log4net记录日志到数据库(含有自定义属性)
  6. java 蓝桥杯算法训练 纪念品分组(题解)
  7. 计算机启用网络查找,怎么搜索局域网中的电脑
  8. 销售流程图_34页财务管理制度和流程图!让你明白会计工作要点,总结全面清晰...
  9. JVM专题之分代模型:年轻代、老年代、永久代
  10. 怎么将文件转换成linux文件,你如何在linux中创建一个将文件转换为大写...