数值的整数次方

来源:互联网 发布:mac桌面下方软件 编辑:程序博客网 时间:2024/05/16 00:49

【题目】给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
【要求】时间限制:1秒 空间限制:32768K

public double Power(double base, int exponent) {        //法1:7^1101 = 7^0001*7^0100*7^1000     第一位的底数7  第二位的底数7*7  第三位底数(7*7)*(7*7) ...        if(exponent<0 && base == 0) throw new RuntimeException("分母不能为0");        int exp = Math.abs(exponent);        int result = 1;        while(exp>0){            if((exp & 1) == 1){//最后一位为1                result *= base;            }            base *= base;            exp = exp >>> 1;        }        //注意取倒数时要用1.0   否则返回int型        return exponent<0?(1.0/result):result;      }
public double Power(double base, int exponent) {    //法2:递归:n为偶数,a^n=a^n/2*a^n/2;n为奇数,a^n=(a^(n-1)/2)*(a^(n-1/2))*a 时间复杂度O(logn)    if(exponent<0 && base == 0) throw new RuntimeException("分母不能为0");    int exp = Math.abs(exponent);    if(exponent == 0) return 1;    if(exponent == 1) return base;    double result = Power(base, exp>>>1);    result *= result;    if((exp&1)==1){        //奇数        result *= base;    }    return exponent<0?(1.0/result):result;  }
0 0
原创粉丝点击