题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
经典的思想:
x ^ (2*n + 1) = (x*n) ^ 2 * x
x ^ (2*n) = (x*n) ^ 2
因此:
class Solution { public: double Power(double base, int exponent) { if (exponent == 0) return 1; bool isNeg = false; if (exponent < 0) isNeg = true, exponent = -exponent; vector<int> isOdd; while (exponent > 1) { isOdd.push_back(exponent % 2); exponent /= 2; } double re = base; for (int i = isOdd.size() - 1; i >= 0; i--) { re = re * re; if (isOdd[i]) re *= base; } return isNeg?(1/re):re; } };
然后我看了一下别人的代码,发现上述对isOdd的操作,实际上可以用x&1得到,代码简洁很多,思路差不多这里就不给出了