
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
/** * 求一个数的exponent次方,先把exponent用二进制表达, * 例如11表示为 1 0 1 1,则结果为 * (1*base^8)*(0 * base^4)*(1*base^2)*(1*base); * 且base^8 = base^4 * base^4; base^4 = base^2 * base^2; * 这样,低位所求得的结果,可以在计算高一位的结果时复用,减少了计算量, * 于是有如下算法。 **/ public class Solution { public double Power(double base, int exponent) { if (0 == base) { return 0; }else if (1 == base) { return 1; }else if (-1 == base){ return 0 == exponent % 2 ? 1 : -1; }else if (0 == exponent){ return 1; } else if (0 < exponent) { double result = 1; while (0 != exponent){ if (1 == (exponent & 1)) { result *= base; } base *= base; exponent = exponent >> 1; } return result; } else { return 1 / Power(base, 0 - exponent); } } }
|
近期评论