实现pow(double x, int n)

整理来源: http://bbs.csdn.net/topics/390511135

(由于0^0有争议,在这儿取0^0=0)

// 依次乘以n次x的值得到最终结果
double Power1(double x, int n)          // 循环乘以n,特殊情况,考虑n的正负
{
    if (x == 0 || x == 1)               // 如果x为0或者-1直接返回x
        return x;
    int number = n > 0 ? n : -n;        // 将n的绝对值返回给number
    double result = 1;
    for (int i = 1; i <= number; i++)   // 循环number,将x的number次幂存入result
        result *= x;
    if (n > 0)                          // 如果n为正数,直接输出结果result
        return result;
    else                                // 如果n为负数,输出result的相反数
        return 1 / result;
}


// 按照n的二进制值,依次判断是否为1,然后分别乘以x, x^2, x^4, ... 得到最终结果
double Power2(double x, int n)          // 循环乘以n,特殊情况,考虑n的正负
{
    if (x == 0 || x == 1)               // 如果x为0或者-1直接返回x
        return x;

    int number = n > 0 ? n : -n;        // 取n的绝对值返回给number
    double temp_x = x;

    double result = 1;                  // 初始化计算结果变量为1
    while (number)                      // 当number不为0,循环下面的操作
    {
        if (number&1)                   // 如果number最后一位为1,即number对2取余后剩下1
            result *= temp_x;           // result乘以当前x的幂次方

        temp_x *= temp_x;               // temp_x取它平方值
        number = number >> 1;           // number二进制右移一位,进入下一次循环
    }

    if (n > 0)                          // 如果n为正数,直接输出结果result
        return result;
    else                                // 如果n为负数,输出result的相反数
        return 1 / result;
}

// 用递归的方法,实现Power(x, n) = Power(x, n/2) * Power(x, n/2) 【* x】,如果n是奇数多乘以一个x
double Power3(double x, int n)          // 循环乘以n,特殊情况,考虑n的正负
{
    if (0 == x || 1 == x || 1 == n)     // 如果x为0或者1,或者n为1,直接返回x本身
        return x;

    if (0 == n)                         // 当n=0时,直接返回1
        return 1;

    double half = Power3(x, n/2);          // 计算x的n/2幂方

    if (0 == n % 2)                     // 当n为偶数,返回x的n/2幂方的平方
        return half * half;
    else if (n > 0)                     // 当n为奇数且n为正数,返回x的n/2幂方的平方乘上x
        return half * half * x;
    else
        return half * half / x;         // 当n为奇数且n为正数,返回x的n/2幂方的平方乘上1/x
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值