/给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0/ 解法一:循环求解
class Solution { public: double Power(double base, int exponent) { if (base == 0) return 0.0; if (exponent == 0) return 1.0; //整数包含负数,2^-3=(1/2)^3; if (exponent < 0) { base = 1.0 / base; exponent = -exponent; } double ret = 1.0; for (int i = 0; i < exponent; ++i) { ret *= base; } return ret; } };解法二:快速幂 //如:28=(24)^2; 24=(22)^2; 即2n=(2n/2)^2; //上述只适用于偶数,奇数为2n=(2n/2)^2*base;即只需要多乘一次base即可
class Solution { public: double ret = 1.0; //保存base double b = 0.0; double power(double base, int exponent) { if (exponent == 1) return base; if (exponent == 0) return 1.0; //计算base^(exponent/2); ret = power(base, exponent); //区分奇数偶数情况 if (exponent & 1) { return ret * ret * b; } else return ret * ret; } double Power(double base, int exponent) { if (base == 0) return 0.0; if (exponent == 0) return 1.0; //整数包含负数,2^-3=(1/2)^3; if (exponent < 0) { base = 1.0 / base; exponent = -exponent; } b = base; return power(base, exponent); } };