1. 程式人生 > >LeetCode-50-Pow(x, n)

LeetCode-50-Pow(x, n)

double pow(x i++ min gpo 測試用例 clas tco ron

一、問題描述

  求x的n次方

二、問題解決

1、最簡單的思路,當n大於0時,對1乘n次x。當n小於0時,對1乘n次1/x。

double myPow(double x, int n) {
    long long N = n;
    if (N < 0) {
        x = 1 / x;
        N = -N;
    }
    double result = 1;
    for (long long i = 0; i < N; i++) {
        result = result * x;
    }
    return result;
}

//這是測試用例
int main() { cout << myPow(2.0000,INT_MIN) << endl; system("pause"); return 0; }

2、時間復雜度為log的解決。每次對n取n/2,對x取x的平方(如果n%2 == 1時結果還需乘一個n)。

double myPow(double x, int n) {
    long long N = n;
    if (N < 0) {
        x = 1 / x;
        N = -N;
    }
    double result = 1;
    double
temp = x; for (long long i = N; i != 0; i /= 2) { if (i % 2 == 1) result = result * temp; temp = temp * temp; } return result; } //這是測試用例 int main() { cout << myPow(2.0000,INT_MIN) << endl; system("pause"); return 0; }

三、問題思考

  本題註意n<0的情況,能轉化成1/x的多少次方來求。但是註意INT_MIN取負的問題。

LeetCode-50-Pow(x, n)