题目:
实现函数 double Power(double base, int exponent),求base的exponent次方。(不使用库函数,不考虑大数问题)
思路:看到题目,我们首先想到的是常规的进行循环乘,求出exponent次方,当然这里要注意正数,负数,0和1这几个特殊情况的判断。(尤其是在判断例如base是否为0时,由于base是double类型的,所以不能使用==,可以重写equal()方法,使用相减来判断,如果结果小于0.0000001,那么就忽略,认为base是0)
另一种比较巧妙的方法是找出递归公式,例如exponent是16,求base的16次方,我们可以先求base的8次方为m,那么base的16次方就是m*m,依次类推,可以得到一个公式:
根据这个公式,可以写出一个递归的函数,而不用循环那么多次,是比较高效的。
代码如下:
import java.util.*;
public class Main14
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
double base = s.nextDouble();
int exponent = s.nextInt();
System.out.println(Power(base, exponent));
}
public static double Power(double base,int exponent)
{
if(exponent==0)
return 1;
if(exponent==1)
return base;
double result = Power(base,exponent>>1);
result *= result;
if(exponent%2==1) //如果为奇数,那么还要乘一个base
result *= base;
return result;
}
}
本人经验,仅供参考!