【Leetcode】69. Sqrt(x) 【溢出?如何防止?】

来源:互联网 发布:投资网络 编辑:程序博客网 时间:2024/06/05 06:40

69.Sqrt(x)
Implement int sqrt(int x).

Compute and return the square root of x.

代码:
class Solution {
public:
int mySqrt(int x) {
if(x<2)
return x;
int lef=0,rig=x;
int mid=0;

    while(rig>lef+1)    {        mid=(rig+lef)/2;        if( x/mid < mid )        {            rig=mid;        }        else        {            lef=mid;        }    }    return lef;}

};

一开始我写的是这么个判断条件

if(x < mid*mid)

这里并没有注意到mid*mid会溢出!!!,溢出之后取模后又变成很小的,于是LeetCode提示Time Limit

怎么办?

也许你注意到了,改成这么个样子就不会溢出

if(x/mid < mid)

当然也有黑科技将INT_MAX开根号的值作为上限。

对于数字加减乘除一定要警惕溢出,要建立意识啊!