LeetCode -- 50 Pow(x, n)(C語言版)
阿新 • • 發佈:2018-11-11
題目描述:
程式碼如下(附有詳解):
double myPow(double x, int n) //如果n為零,表明冪數為0,直接返回1 if(n == 0) return 1; //如果n為零,表明冪數為0,直接返回x if(n == 1) return x; //p值相當於將冪數折半,減少重複計算 //若n取該範圍內為[-2147483648,2147483647],當n取最小值, //那麼當使用n=-n時就會出現溢位的情況,這裡就可以避免出現溢位的情況 int p=n/2; //如果n為負數,那麼將x值取其倒數,然後再將p的值乘以-1,這樣就相當於 //求x倒數的n次冪,p改為正數 if(n < 0) { //p值改為正數 p=-p; //x值取其倒數 x = 1 / x; } double res = myPow(x, p); //為了提高時間複雜度,避免重複計算,可以將n不斷除二來減少計算量 //當n為32時,除二就為16,那麼只需要將x^16與自身相乘即可,若n為奇數 //那麼只需要再乘以x即可 if(n % 2 == 0) return res * res; return res * res * x; }
劍指offer(12)--數值的整數次冪