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

邢台市的做网站制作公司乐事薯片软文推广

邢台市的做网站制作公司,乐事薯片软文推广,广东源江建设集团有限公司网站,下载网站后台【Java】再一次踩了整数溢出的坑 一、起因原题示例 1示例 2提示 我的代码提交结果 二、思考修改后的代码如下 三、知识点1. int m l ((r - l) / 2)解释 2. if (m < x / m)解释 四、结尾 一、起因 我在做【力扣】69.x 的平方根 一题的时候&#xff0c;明明觉得逻辑没问题&…

【Java】再一次踩了整数溢出的坑

  • 一、起因
    • 原题
      • 示例 1
      • 示例 2
      • 提示
    • 我的代码
    • 提交结果
  • 二、思考
    • 修改后的代码如下
  • 三、知识点
    • 1. `int m = l + ((r - l) / 2)`
      • 解释
    • 2. `if (m < x / m)`
      • 解释
  • 四、结尾

一、起因

我在做【力扣】69.x 的平方根 一题的时候,明明觉得逻辑没问题,可答案就是不对。

原题

给你一个非负整数 x ,计算并返回 x算术平方根
由于返回类型是整数,结果只保留整数部分,小数部分将被舍去
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例 1

输入:x = 4
输出:2

示例 2

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

提示

  • 0 <= x <= 231 - 1

我的代码

class Solution {public int mySqrt(int x) {//处理特殊值 0 和 1if (x == 0) {return 0;}if (x == 1) {return 1;}//二分法查找int l = 1, r = x / 2;while (l <= r) {int m = l + ((r - l) / 2);if (m * m == x) {return m;} else if (m * m < x) {l = m + 1;} else {r = m - 1;}}if (r <= l) {return r;} else {return l;}}
}

提交结果

输入:2147395599
输出:1073697799
预期结果:46339

二、思考

我反复检查代码的逻辑,都没发现问题出现在哪里,直到我看见 别人的题解。
对比代码之后我恍然大悟,明白自己又踩了整数溢出的坑。

修改后的代码如下

class Solution {public int mySqrt(int x) {//处理特殊值 0 和 1if (x == 0) {return 0;}if (x == 1) {return 1;}//二分法查找int l = 1, r = x / 2;while (l <= r) {int m = l + ((r - l) / 2);if (m == x / m) {return m;} else if (m < x / m) {l = m + 1;} else {r = m - 1;}}return r;}
}

三、知识点

1. int m = l + ((r - l) / 2)

int m = l + ((r - l) / 2) 而不是直接写 int m = (l + r) / 2 是为了防止整数溢出

解释

  • 假设我们写的是 int m = (l + r) / 2
    lr 都是非常大的正整数时(接近 Integer.MAX_VALUE,即 2147483647),l + r 可能会超过 int 类型的最大表示范围 (2^31 - 1),这会导致溢出,结果会变成负数,从而导致程序的行为不符合预期。
    如: l = 2000000000r = 2000000000,那么 l + r = 4000000000,这是超过 int 的最大值 2147483647 的,会产生溢出。

  • 假设我们写的是 int m = (l + r) / 2
    r > l 时,r - l 不会溢出,它是一个较小的数,(r - l) / 2 也不会产生太大的值,最终加上 l,依然保持在 int 范围内。

2. if (m < x / m)

m < x / m 而不写 m * m < x 也是为了防止整数溢出

解释

原理同上。
m * m > 2147483647 时会发生整数溢出,结果会变成负数,导致程序的行为不符合预期。

四、结尾

当然,也可以将 m * m < x 改成 (long) m * m < x,这样就不用担心整数溢出了,因为 long 类型的最大值比 int 类型的最大值大得多。

http://www.shuangfujiaoyu.com/news/53598.html

相关文章:

  • 外卖网站建设文档seo教学免费课程霸屏
  • html网站两边的浮窗怎么做网络营销推广工具有哪些?
  • 鄂尔多斯市城乡建设委员会网站搜索优化引擎
  • 教育视频培训网站建设汽车网站建设方案
  • 小白如何搭建个人网站技能培训
  • iis7 添加php网站短视频推广app
  • 毕业设计做网站有哪些需求seo网站建设是什么意思
  • 重庆企业网站建设报价百度seo推广软件
  • 商城网站建设网站开发北京公司
  • dedecms导入网站模板企业培训课程视频
  • 燕郊网站制作商丘网站seo
  • 专业供应的网站制作怎么自己建立网站
  • 眉县网站开发建站
  • 在线客服联系seo搜索推广费用多少
  • 六安市 网站集约化建设国家认可的教育培训机构
  • 现在lol谁做教学视频网站最新nba排名
  • 湘潭做网站价格 d磐石网络为什么打开网址都是站长工具
  • 企业网站备案申请seo快速排名软件品牌
  • 做网站编程要学什么指数基金定投怎么买
  • 自己做b2b平台网站建设seo引擎搜索
  • 网站开发 保修期百度官方入口
  • 设计方案审查意见班级优化大师网页版登录
  • 免费h5源码资源源码站热点时事新闻
  • 泉州科技云网站建设爱站网长尾关键词挖掘工具电脑版
  • 做网站ps文字有锯齿seo百度排名优化
  • 做网站做的好的公司有哪些怎么在百度推广
  • 百度智能小程序怎么优化排名南宁网站优化
  • 吕梁网站建设优化合作平台
  • 北京企业网站开发多少钱厦门零基础学seo
  • 开发网站开发工程师互联网电商平台有哪些