当前位置: 首页 > 知识库问答 >
问题:

第69号。Sqrt(x)[副本]

方宜
2023-03-14

我的以下代码在我是双人时起作用

public int mySqrt(int x) {
        double i = 1;
        while(i * i <= x){
            i++;
        }
        return (int)--i;
    }

而当“i”是int时,此代码不起作用

public int mySqrt(int x) {
        int i = 1;
        while(i * i <= x){
            i++;
        }
        return --i;
    }

为什么我会出现这个错误?

共有1个答案

贝阳泽
2023-03-14

要得到答案46340,while循环需要上升到46341。当你做46341平方时,我们应该得到

2147488281

但我们试图将其存储在一个32位有符号整数中,其最大值为2^31,或

2147483647

现在,我不知道Java是否已经为带符号溢出定义了语义,但很可能结果会变成某个负数,而你的算法将继续运行,产生无意义的结果,直到碰巧得到一个溢出,它超过了你的输入数。

 类似资料:
  • sqrt() 方法 sqrt() -- 返回数的平方根 语法: Math.sqrt( x ); 参数说明: x -- 大于等于 0 的数 返回值: 参数 x 的平方根。如果 x 小于 0,则返回 NaN。 示例: console.log( Math.sqrt( 1 ) ); console.log( Math.sqrt( -1 ) ); console.log( Math.sqr

  • Question leetcode: Sqrt(x) lintcode: Sqrt(x) Problem Statement Implement int sqrt(int x). Compute and return the square root of x. 题解 - 二分搜索 由于只需要求整数部分,故对于任意正整数 $$x$$, 设其整数部分为 $$k$$, 显然有 $$1 \leq k \l

  • 描述 (Description) C库函数double sqrt(double x)返回double sqrt(double x)的平方根。 声明 (Declaration) 以下是sqrt()函数的声明。 double sqrt(double x) 参数 (Parameters) x - 这是浮点值。 返回值 (Return Value) 此函数返回x的平方根。 例子 (Example) 以下

  • 侯会计是个与众不同的人。比如有人向你提意见,认为你错了,你大概会想:我哪里会错呢?肯定是你自己错了吧,理由如此如此这般这般。但是如果一百个人向你提意见,认为你错了,你大概就会想:也许我真的错了。 但侯会计不是这样的,哪怕是全世界的人都向她提意见,她也会固执地认为全世界的人都不对,都不理解她。要是只有一个人向她提意见,又不一样了,她多半认为这人肯定跟自己有仇,一定要狠狠地打击报复。 抱着这样的心理,

  • 描述 (Description) 此函数返回EXPR的平方根,如果省略则返回$ _。 大多数情况下,此函数返回浮点数。 语法 (Syntax) 以下是此函数的简单语法 - sqrt EXPR sqrt 返回值 (Return Value) 此函数返回浮点数。 例子 (Example) 以下是显示其基本用法的示例代码 - #!/usr/bin/perl -w $result = sqrt(4);