1. 程式人生 > >劍指offer題解C++【12】數值的整數次冪

劍指offer題解C++【12】數值的整數次冪

題目描述

給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

解題思路

庫函式中有冪函式pow(x,y),如果你直接return pow(base,exponent);也能通過測試用例,但估計offer無緣了。

為了降低時間複雜度,使用迭代:

  • 如果n為偶數,a^n=a^(n/2)*a(n/2);
  • 如果n為奇數,a^n=a^(n/2)*a(n/2)*a;
  • n/2可以用右移1位得到;

此外,本題還要考慮以下幾點:

  • exponent=0時,結果為1;
  • base趨近於0時,結果為0;
  • base趨近於1時,結果為1;
  • base趨近於-1時,指數為奇數時結果為-1,指數為偶數時結果為1;
  • exponent<0時,結果為(1/base)^(-exponent);

程式碼

class Solution {
public:
    double Power(double base, int exponent) {
        if (exponent == 0)
            return 1.0;     

        if (fabs(base) < 1e-5)
            return 0.0;

        if (fabs(base - 1) < 1e-5)
            return 1;

        if
(fabs(base + 1) < 1e-5) return exponent % 2 ? -1 : 1; if (exponent < 0){ base = 1.0 / base; exponent = -exponent; } double res = 1.0; while (exponent){ if (exponent % 2){ res *= base; } base
*= base; exponent >>= 1; } return res; } };