我一直在尝试解决一个问题,该问题要求我编写一个名为mySqrt
的函数int mySqrt(int x)
。
我应该计算并返回x的平方根,其中x保证是一个非负整数。
由于返回类型是整数,因此十进制数字将被截断,并且仅返回结果的整数部分。
我尝试实现一种简单的算法,该算法从i=0
开始,然后将i
的值递增到$i*i<=x$
,然后返回i-1
。
public int mySqrt(int x) {
int i=0;
while(i*i<=x){
i++;
}
return (i-1);
}
我对正在发生的事情有所了解,但我真的不明白为什么。
当我足够大时,i^2 >2^31-1
在(i*i<=x)
的while循环x=2147395600
中的比较(小于2^31-1
)使我成真。为什么会这样呢?结果,我得到了垃圾结果。当我尝试评估(i^2<=x
时无法再将i^2
存储在int中时,到底发生了什么?