实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x的n次方)。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
暴力是会超时的,这个过不了
double myPow(double x, int n) {
double tmp=1;
if(n<0)
{
x=1/x;
n=-n;
}
for(int i=0;i<n;i++)
{
tmp*=x;
}
return tmp;
}
直接安排下面这种,超越100%。图片仅供参考
double myPow(double x, int n) {
double tmp=1.0;
for(int i=n;i!=0;i/=2)
{
if(i%2!=0)//奇数
{
tmp*=x;
}
x*=x;
}
return n>0?tmp:1/tmp;
}
让i初始化为n,然后看i是否是2的倍数,不是的话就让 tmp 乘以x。然后x乘以自己,i每次循环缩小一半,直到=0停止循环。最后一次 i 必定变为 1,必定乘以tmp,最后返回时判断n的正负
假设x=2,n=5;n为奇数,第一次进入循环,tmp*=x,也就是 1x,之后i/=2变为i=2,开始算x * x,再一次 i变为1,也就是最后一次了,乘个x,就是之前算出来的前面所有的乘积。
假设x=2,n=4,n为偶数,第一次进入循环,直接算xx,只有偶数个,对半乘就好了,最后i变为1,乘个tmp,结束。
很巧妙的算法,从大神偷来的,学到了。
https://www.cnblogs.com/grandyang/p/4606334.html