x的n次方(编程珠玑第四章)

本文探讨了如何高效地计算x的n次方,包括正数和负数情况。提供了两种版本的实现,一种是迭代法,另一种是递归法。代码已在LeetCode的在线测试环境中通过,特别注意了最小负整数n=-2147483648的情况。
摘要由CSDN通过智能技术生成

测试过的版本:考虑了n是负数的情况

测试网站:leetcode的https://oj.leetcode.com/problems/powx-n/点击打开链接

#include<iostream>

using namespace std;

double power(double x, int n)

{

         doubletemp=x;

         doubleresult=1;

         if(n==0)

                  return1;

         if(n<0)

                  return1/x/power(x,-(n+1));//注意最小的负数-2147483648,没有对应的正数!!

         while(n!=0&& (n&1)==0)

         {

                  x*=x;

                  n>>=1;

         }

         if(n==0)

                  returnx;

         result*=x;

         n--;

         while(n!=0)

         {

                  x*=x;

                  n>>=1;

                  if((n&1)==1)

                  {

                          result*=x;

                          n--;

                  }

         }

         return result;

}

 递归版本如下:

double power(double x, int n)

{

    double result=1;

    if(n==0)

              return 1;

    if(n<0)

              return 1/x/pow(x,-(n+1));//注意最小的负数-2147483648,没有对应的正数!!

    while(n!=0 && (n&1)==0)

    {

              x*=x;

              n>>=1;

    }

    if(n==0)

              return x;

    return x*pow(x,n-1);

}

 

int main()

{

         doublex=1.200;

         intn=15;

         cout<<power(x,n)<<endl;

         cout<<pow(x,n)<<endl;

 

         system("pause");

         return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值