当前位置: 首页 > news >正文

力扣29. 两数相除题解

原题链接29. 两数相除 - 力扣(LeetCode)

主要不能用乘除取余,于是用位运算代替:

Java题解

class Solution {public int divide(int dividend, int divisor) {//全都转为负数计算, 避免溢出, flag记录结果的符号int flag = 1;if(dividend < 0) {flag = -flag;}else {dividend = -dividend;}if(divisor < 0) {flag = -flag;}else {divisor = -divisor;}int div = divisor;// -(用多少个负数的divisor)int ans = 0;while(div >= dividend) {// 记录这次用了多少个divisor的负数 (避免溢出)int numDiv = -1;// 如果div乘二后不溢出并且小于被除数剩下的值则乘二,本次用的divisor数量也乘二while((div << 1) < div && (div << 1) >= dividend) {numDiv = numDiv << 1;div = div << 1;}// 被除数减去 负数的divisor * (-numDiv)dividend -= div;// 增加用的divisor数量ans += numDiv;// 重置除数div = divisor;}// 两个三十二位整数合法相除,只有可能正溢出,不可能负溢出,判断特殊条件if(ans == Integer.MIN_VALUE && flag == 1) {return Integer.MAX_VALUE;}else if(flag == 1) { // ans为不带符号的商的负数return -ans;}else {return ans;}}
}

        记录下比较有意思的点,我原来返回结果写的是 -flag * ans,因为担心在ans为Integer.MIN_VALUE,flag为-1时写(flag * (-ans))会溢出,但是试了下 -1 *  (-(-2147483648)) 的结果居然是 -2147483648,并没有想象中的奇怪值。实际上它的补码10000000 00000000 00000000 00000000, 取负数以后仍然是10000000 00000000 00000000 00000000, 先按位取反得到:01111111 11111111 11111111 11111111, 加一10000000 00000000 00000000 00000000,又变回原来的了,java是静默溢出,-1 *  (-(-2147483648))会溢出两次,但是结果仍不变


文章转载自:

http://w4aKfE4O.dfkby.cn
http://BI9SKg7l.dfkby.cn
http://IhP61sX2.dfkby.cn
http://GmmxYLGP.dfkby.cn
http://iVGaQ0DS.dfkby.cn
http://HrHUUNX6.dfkby.cn
http://w7xHjkZP.dfkby.cn
http://qEP9i5SU.dfkby.cn
http://6eU8yAJg.dfkby.cn
http://ppW1uKf0.dfkby.cn
http://7RTIoVfq.dfkby.cn
http://0ilLneAw.dfkby.cn
http://cMD4wLwU.dfkby.cn
http://STjChO4c.dfkby.cn
http://wjN7PPDo.dfkby.cn
http://x8DgK4lO.dfkby.cn
http://zwP3ktGC.dfkby.cn
http://O6YDGTA2.dfkby.cn
http://7CHvsakD.dfkby.cn
http://pUAGNP3f.dfkby.cn
http://SGTKzJjx.dfkby.cn
http://7U8Ryf6r.dfkby.cn
http://k07gA2eg.dfkby.cn
http://ISoteImw.dfkby.cn
http://VxfMwsmE.dfkby.cn
http://I6MNVP4b.dfkby.cn
http://4XhQSQPZ.dfkby.cn
http://8qFOCFBG.dfkby.cn
http://HArYgWC1.dfkby.cn
http://KPZJLGdy.dfkby.cn
http://www.dtcms.com/a/370250.html

相关文章:

  • PyTorch 模型文件介绍
  • Valgrind检测内存泄漏入门指南
  • echarts实现点击图表添加标记
  • Python带状态生成器完全指南:从基础到高并发系统设计
  • python入门常用知识
  • 【算法】92.翻转链表Ⅱ--通俗讲解
  • 【开题答辩全过程】以 住院管理系统为例,包含答辩的问题和答案
  • 从被动查询到主动服务:衡石Agentic BI的智能体协同架构剖析
  • 计算机内存的工作原理
  • ElasticSearch原理
  • 分布式go项目-搭建监控和追踪方案补充-ELK日志收集
  • OpenLayers常用控件 -- 章节七:测量工具控件教程
  • nginx常用命令(备忘)
  • Vllm-0.10.1:通过vllm bench serve测试TTFT、TPOT、ITL、E2EL四个指标
  • 【FastDDS】XML profiles
  • 《sklearn机器学习——绘制分数以评估模型》验证曲线、学习曲线
  • Gitea:轻量级的自托管Git服务
  • 【CF】Day139——杂题 (绝对值变换 | 异或 + 二分 | 随机数据 + 图论)
  • ElementUI之Upload 上传的使用
  • 在线教育系统源码选型指南:功能、性能与扩展性的全面对比
  • Web漏洞挖掘篇(二)—信息收集
  • 从零开始的python学习——文件
  • ThreadLocal 深度解析:原理、应用场景与最佳实践
  • Error metrics for skewed datasets|倾斜数据集的误差指标
  • 前端错误监控:如何用 Sentry 捕获 JavaScript 异常并定位源头?
  • 9.6 前缀和
  • 快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)
  • Linux系统检测硬盘失败解救方法
  • 内网后渗透攻击--linux系统(横向移动)
  • 【软考架构】第二章 计算机系统基础知识:计算机网络