这道题用二分法找平方根,这个想法很自然,不过要注意变量要定义成unsigned long long,这个不太常用,因为此题试到long long 都不够。给出各类型的最大值供参考,便于以后查找:
char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65535 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
class Solution {
public:
int sqrt(int x) {
if(x==0) return 0;
if(x==1) return 1;
unsigned long long r,left,right,mid;
left=1;
right=x;
while(left<=right){
mid=(left+right)/2;
r=mid*mid;
if(r==x)
return mid;
if(r>x)
{
right=mid-1;
mid=(left+right)/2;
r=mid*mid;
}
else
{
left=mid+1;
mid=(left+right)/2;
r=mid*mid;
}
}
return mid;
}
};