[劍指offer] 數值的整數次方
阿新 • • 發佈:2017-11-25
mar 整數次方 nbsp offer 浮點數 發現 數值的整數次方 bsp subject
題目描述
給定一個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得到,代碼簡潔很多,思路差不多這裏就不給出了
[劍指offer] 數值的整數次方