题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
个人觉得此题考查的是快速幂算法。
快速幂算法
快速幂 , 矩阵快速幂 在算大指数次方时是很高效的,他的基本原理是二进制。
大家首先要认识到这一点:任何一个整数N,都能用二进制来表示。。
那么对于an , n一定可以用二进制表示,比如a11
double fun( double a, int b )
{
double r = 1;
double base = a;
while( b != 0 )
{
if((b&1)==1)//判断奇偶性,为1时才进行运算
{
r *= base;
}
base *= base;
b=b>>1;
}
return r;
}
此题代码
public class Solution12 {
public double Power(double base, int exponent) {
double res = 1, curr = base;
int n;
if (exponent > 0) {
n = exponent;
} else if (exponent < 0) {
if (base == 0)
throw new RuntimeException("分母不能为0");
n = -exponent;
} else {// exponent==0
return 1;// 0的0次方
}
while (n != 0) {//快速幂算法
if ((n & 1) == 1){
res *= curr;
}
curr *= curr;// 翻倍
n >>= 1;// 右移一位
}
return exponent >= 0 ? res : (1 / res);
}
public static void main(String[] args) {
Solution12 solu = new Solution12();
System.out.println(String.valueOf(solu.fun(3, 4)));
}
}