给出一个正整数 'num
,写一个函数,要求当这个当num
为完全平方数时函数返回True
,否则返回False。
要求不利用Sqrt函数库。
解法一:
利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和
我们还可以发现,完全平方数的末位不含2,3,7,8.
bool IsPerfectSquare(int num)
{
int temp = num % 10;
if (!(temp == 0 || temp == 1 || temp == 4 || temp == 5 || temp == 6 || temp == 9))
return false;
for (int i = 1; num > 0; i += 2)
{
num -= i;
}
if (num == 0)
return true;
return false;
}
解法二
利用二分法求解
bool IsPerfectSquare2(int num)
{
if (num == 1) return true;
int start = 0;
int end = num/2;
while (start <= end)
{
//int 范围不够
long temp = (start + end) / 2;
if (temp * temp == num)
{
return true;
}
if (temp * temp > num)
{
if (end == temp)
{
//如果不返回会死循环,
return false;
}
end = (int)temp;
}
else
{
if (start == temp)
{
return false;
}
start = (int)temp;
}
}
return false;
}