实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 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
提示:
-100.0 < x < 100.0
-2^31 <= n <= 2^31-1
-10^4 <= x^n <= 10^4
题解:快速幂的方法,这里说一下快速幂的原理。举个例子,比如2的11次方。,当指数为偶数时,底数就一次自我相乘一次,然后指数减半,当指数为奇数时,当前底数可以先算出来,然后与答案相乘,底数减一就行。然后代码可以再省略一下,如果是指数是奇数时,那么指数减一,下一次指数一定时偶数,然后底数进行平方,指数减半,可以直接一次解决,当指数是奇数,先与答案相乘,然后指数除以2,底数进行平方。 举个例子,当指数为5时,这时候按理应该是指数减一,然后下一次指数减半底数平方,但是直接5/2=2,底数平方,是一样的结果。
最后,本题需要强制转换类型一下,把n转换为long就行。
class Solution {
public double myPow(double x, int n) {
if(n==0)
return 1;
//boolean flag=false;
long t=(long)n;
if(t<0)
{
x=1/x;
t*=-1;
}
double ans=1.0;
while(t>0)
{
if(t%2!=0)
{
ans=ans*x;
}
t/=2;
x=x*x;
}
return ans;
}
}