1题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
2.解题思路
- 指数为负时,可以先对指数求绝对值,算出次方的结果后再取倒数
- 当底数为0,指数为负时,会出现对0求倒数情况,要特殊处理
- 0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的
- 在计算次方的时候,除了简单的遍历,我们可以使用递归的思想
3.代码
public class 数值的整数次方 {
public static void main(String[] args) {
double base = 1.2 ;
int exponent = 5;
double sum = numExp(base, exponent);
System.out.println(sum);
}
/**
*
* @param base
* @param exponent
* @return
*/
public static double numExp(double base , int exponent){
int n = exponent ;
if(exponent == 0){
return 1;
}else if(exponent < 0){
if(base == 0){
throw new RuntimeException("分母不能为零");
}
n = -exponent ;
}
double res = PowerExp(base , n);
return exponent < 0 ? 1/res:res;
}
private static double PowerExp(double base, int n) {
if(n == 0)
return 1;
if( n == 1)
return base;
//递归
double res = PowerExp(base, n/2);
//System.out.println("res1:"+res);
res *= res ;
//System.out.println("ressum:"+res);
if(n%2==1){//最后n为1的情况
res*=base;
System.out.println("res+base:"+res);
}
return res;
}
}