问题描述:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
解题思路:
- 判断x的n次方为正或负数;
- 若为负数直接转换成int类型会超出范围,直接定义一个long型,进行转换;
- 当n的最低位存在 ,则进行一次乘积;
- 否则每次平方的关系进行扩大,(二进制当中每位相差平方数)
class Solution {
public:
double myPow(double x, int n)
{
double num=1;
long N=n;
if (N < 0)
{
N=-N;
}
while (N)
{
if (N&1)
num=num*x; //n的最低位存在,最后再乘1个x;
x *= x; //每次都是x*x,
N >>= 1; //N右移一位
}
return n > 0 ? num:1/num;
}
};