21xrx.com
2024-09-20 00:49:46 Friday
登录
文章检索 我的文章 写文章
C++中求一个数的n次方
2023-07-05 14:07:15 深夜i     --     --
C++ n次方

在C++中,想要求一个数的n次方,我们有多种方法可以实现。下面我们来介绍几种常见的方法。

1. 暴力求解法

暴力求解法是最朴素的方法。我们可以用循环来实现,每次乘上x的值即可。需要注意的是,当n=0时,结果应为1。

代码实现如下:


double power(double x, int n) {

  if(n == 0) return 1.0;

  double res = 1.0;

  for(int i = 0; i < n; i++) {

    res *= x;

  }

  return res;

}

2. 递归求解法

递归求解法是一种比较优美的实现方式,可以充分体现出递归的威力。我们可以将 n 除以 2,不断地递归求解,然后将结果相乘即可。需要注意的是,当 n < 0 时,我们需要将 x 取倒数,并将 n 变为正数。

代码实现如下:


double power(double x, int n) {

  if(n == 0) return 1.0;

  double half = power(x, n / 2);

  if(n % 2 == 0) {

    return half * half;

  } else if(n > 0) {

    return half * half * x;

  } else {

    return half * half * (1 / x);

  }

}

3. 快速幂算法

快速幂算法是求 a 的 n 次方的一种高效算法。它利用了位运算的性质,将指数拆成二进制形式,然后计算每一位对应的乘积。具体实现方法如下:

代码实现如下:


double power(double x, int n) {

  if(n == 0) return 1.0;

  double res = 1.0;

  long long exp = n;

  if(exp < 0)

    x = 1 / x;

    exp = -exp;

  

  while(exp > 0) {

    if((exp & 1) == 1) {

      res *= x;

    }

    x *= x;

    exp >>= 1;

  }

  return res;

}

以上三种方法都可以用来求一个数的 n 次方,其中快速幂算法是最优解,时间复杂度为 O(logn)。我们可以根据实际情况选择不同的方法来实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复