1. 程式人生 > >[劍指offer] 數值的整數次方

[劍指offer] 數值的整數次方

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] 數值的整數次方