实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
链接:https://leetcode-cn.com/problems/sqrtx
/*基本思想:二分法,就是x除以一个数等于这个数的思想,找这个数从x/2之内找,注意找不到的时候取相近的那个
*/
class Solution {
public:
int mySqrt(int x) {
if(x<2)
return x;
int left=1;
int right=x/2;
int last_mid=1;
while(left<=right)
{
int m=(left+right)/2;
if(x/m < m)
right = m-1;
else if(x/m>m)
{
left = m+1;
last_mid = m;
}
else
return m;
}
return last_mid;
}
};
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
链接:https://leetcode-cn.com/problems/powx-n/
/*
基本思想:递归二分,主要是二分的时候注意奇数,偶数的n,先递归计算出来结果再判断奇数偶数多乘一次,如果先判断再递归会超时
*/
class Solution {
public:
double pow(double x, long long n)
{
if(n==0)
return 1;
double res = pow(x,n/2);
if(n%2==0)
{
return res*res;
}
else
{
return res*res*x;
}
return 0;
}
double myPow(double x, long long n) {
int sign=1;
if(n<0)
{
sign = -1;
}
double res = pow(x,abs(n));
if(sign==-1)
return 1/res;
return res;
}
};