[编程题]数值的整数次方

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);
            }
        }
    }
}

原文地址:https://www.cnblogs.com/jiyongjia/p/13191814.html