题目链接:69. x 的平方根 - 力扣(LeetCode)
把目标数的算术平方根二分,二分法找到等于目标数的算术平方根,如果没有等于的找小于它的最大数。这里n的范围是2*1e9,所以r=200000。
#include<iostream>
using namespace std;
class Solution {
public:
long long mySqrt(long long target) {
long long l=0;
long long r=200000;
while(l<=r)
{
long long mid=l+(r-l)/2;
long long num=mid*mid;
if(num>target)
r=mid-1;
else if(num==target) return mid;
else
l=mid+1;
}
return r;
}
int main()
{
long long n;
cin>>n;
cout<<mySqrt(n);
return 0;
}
};
题目:367. 有效的完全平方数 - 力扣(LeetCode)
#include<iostream>
using namespace std;
class Solution {
public:
bool isPerfectSquare(long long target) {
long long l=0;
long long r=200000;
while(l<=r)
{
long long mid=l+(r-l)/2;
long long num=mid*mid;
if(num>target)
r=mid-1;
else if(num==target) return true;
else
l=mid+1;
}
return false;
}
int main()
{
long long n;
cin>>n;
cout<<isPerfectSquare(n);
return 0;
}
};
这题和上一题差不多,就不描述了