您的位置:首页 > 其它

Leetcode 69 sqrt(x)

2013-02-21 21:04 393 查看
注意32位乘法的问题,和寄存器相关!

int sqrt(int x)
{
if (x <= 0)
return 0;
uint64_t high = x, low = 1, mid;
uint64_t square, square2; //!!! initialize high & low
while (low < high)
{
mid = (high - low) / 2 + low;
square = mid * mid;
square2 = (mid + 1) * (mid + 1);
if (square > x && square2 > x)
high = mid; //!!! pay attention that high = mid, not mid = high
else if (square < x && square2 < x)
low = mid;
else
{
if (square <= x && square2 > x)
return mid; //!!! pay attention to the return value, not square, but mid!
else
//x == square2
return mid + 1;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: