当前位置: 首页 > 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.yayakq.cn/news/317114/

相关文章:

  • 钓鱼网站链接怎么做网站建设推广费怎么做账
  • 西安网站建设哪家好做股权众筹的网站
  • wordpress房屋网站模板网站建设 设备
  • 怎么是营销型网站建设做网站前台用什么软件
  • 石家庄做网络推广的网站网站建设做微营销
  • asp.net做网站的优势微信小程序的开发环境
  • 通信公司网站建设小白如何制作网页
  • 郑州建设工程交易中心网站什么招聘网最好找工作
  • 网站开发建设方案书晟合建设集团网站
  • 外贸网站建设如何做哈尔滨网站建设价位
  • 马鞍山建设集团有限公司网站石家庄建站模板源码
  • 网站vip功能怎么实现wordpress与微信公众号互通
  • 做网站 怎么做留言美图秀秀网页版入口
  • 免费做网站公司哪家好wordpress theme framework
  • 电子商务网站的建设的步骤茂名建站模板搭建
  • 建站行业wordpress免费网页建站
  • app软件开发就是网站开发吗厦门百度开户
  • chrome打开建设银行网站 个人网上银行怎么不能查询明细济源城乡建设局网站
  • 游戏网站开发文档国外做节目包装的网站
  • 直播网站创做精美网站开发方案
  • 唐山网站开发培训墨刀做网站网页
  • 搜索引擎如何找到网站广州做网站建设的公司排名
  • 怎么开彩票网站做站长阜阳手机网站开发
  • 网站模块分析直播app开发公司有哪些
  • 美食网站建设的背景和目的百度广告联盟官网下载
  • 外国购物网站设计风格中秋贺卡手工制作图片 简单
  • 我公司让别人做网站了怎么办域名和网站空间怎么做解析
  • 微信网站模板免费下载网站建设吸引人的话语
  • 高质量的高密网站建设旅游网站制作方法
  • 单一产品销售网站建设模板广州冼村为什么叫土豪村