您的位置:首页 > 其它

leetcode | Pow(x, n)

2015-07-18 16:49 405 查看
Pow(x, n) : https://leetcode.com/problems/powx-n/

Implement pow(x, n).

解析:

同剑指offer: 数值的整数次方 | Power

本题考查的关键点有:

double 不能使用“==”

0 不能取负数次幂

任何数的 0 次幂为 1

1的任何次幂为1

-1的偶数次幂为1,奇数次幂为-1

如何快速的计算一个数的整数次幂

注意: 关于基数为 1 或者 -1 时 也要单拿出来,对于n很大时,能显著减少计算次数

class Solution {
public:
double myPow(double x, int n) {
if (equal(x, 0.0) && n < 0)
return 0.0;
if (equal(x, 0.0))
return 0.0;
if (equal(x, 1.0) || n == 0)
return 1.0;
if (equal(x, -1.0))
return (n & 0x01) ? -1 : 1;
double result = unsignedExponentPow(x, abs(n));
if (n < 0)
result = 1.0 / result;
return result;
}

private:
double unsignedExponentPow(double x, int n) {
if (n == 0)
return 1.0;
if (n == 1)
return x;
double result = unsignedExponentPow(x, n >> 1);
result *= result;
if (n & 0x01)
result *= x;
return result;

}
bool equal(double x, double y) {
if (abs(x-y) < 0.00000001)
return true;
else
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: