[编程题]数值的整数次方
12、数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
我的思考
1、如果次方是正树,即直接循环累乘即可;
2、如果次方是0的话,任何数的0次方都是1;
3、如果次方是小于0的数的话,则在循环的时候先变为正数,最终把结果返回为1/res
代码
方法1: 分解法**
public class Solution {
/*
1、如果次方是正树,即直接循环累乘即可;
2、如果次方是0的话,任何数的0次方都是1;
3、如果次方是小于0的数的话,则在循环的时候先变为正数,最终把结果返回为1/res
*/
public double Power1(double base, int exponent) {
double res = 1.0;
if(exponent>0){
for(int i=0;i<exponent;i++){
res *= base;
}
return res;
}else if(exponent==0){
return 1;
}else{
for(int i=0;i<-exponent;i++){ //
res *= base;
}
return 1/res;
}
}
方法2:二分法
/*
方法2:二分:时间超限
*/
public static double Power(double base, int exponent) {
//防止base是1,exponent特别大,导致耗时太长
if(base==1){
return 1.0;
}
double res = 1.0;
if(exponent>0){
if(exponent%2==0){
for(int i=0;i<exponent/2;i++){
res *= base;
}
return res*res;
}else{
for(int i=0;i<exponent/2;i++){
res *= base;
}
return base*res*res;
}
}else if(exponent==0){
return 1;
}else{
if(-exponent%2==0){
for(int i=0;i<Math.abs(exponent/2);i++){ //
res *= base;
}
return 1/(res*res);
}else{
for(int i=0;i<Math.abs(exponent/2);i++){ //
res *= base;
}
return 1/(base*res*res);
}
}
}
}