problem:
Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt.
Example 1:
Input: 16
Output: true
Example 2:
Input: 14
Output: false
tip:
两数相乘时,注意变量的类型。
solution:
①
class Solution {
public:
bool isPerfectSquare(int num) {
for(int i=1;i<=num/i;i++)
{
if(i*i == num) return true;
}
return false;
}
};
②如25,25/2=12,1212>25;12/2=6,66>25;6/2=3,3*3<25.变量范围为3-6,可以发现上界是下界的两倍。
class Solution {
public:
bool isPerfectSquare(int num) {
if(num == 1) return true;
long long x = num/2,t = x * x;//注意这里的类型,不可以使用int,会超范围
while(t > num)
{
x /=2;
t = x * x;
}
for(long long i = x;i <= 2 * x;++i)//这里的类型不可以使用int
{
if(i * i == num) return true;
}
return false;
}
};