你如何在C中取幂?

我尝试过“x = y ** e”,但那不起作用。

使用pow函数(虽然需要float s / double s)。

man pow

  #include <math.h> double pow(double x, double y); float powf(float x, float y); long double powl(long double x, long double y); 

编辑:顺便说一句,对于2的正整数幂的特殊情况,您可以使用位移: (1 << x)将等于2的权力x 。 这有一些潜在的问题,但通常这是正确的。

为了增加Evan所说的话:C没有内置的求幂运算符,因为对于大多数CPU来说这不是一个原始的操作。 因此,它被实现为一个库函数。

另外,为了计算函数e ^ x,可以使用exp(double)expf(float)expl(long double)函数。

请注意,您希望使用^运算符,它是按位异或的运算符。

pow只适用于浮点数(实际上是double s)。 如果你想采取整数的权力,而基地是不知道是2的指数,你将不得不推出自己的。

通常愚蠢的方式是足够好的。

 int power(int base, unsigned int exp) { int i, result = 1; for (i = 0; i < exp; i++) result *= base; return result; } 

这是一个recursion的解决scheme,它需要O(log n)空间和时间,而不是简单的O(1)空间O(n)时间:

 int power(int base, int exp) { if (exp == 0) return 1; else if (exp % 2) return base * power(base, exp - 1); else { int temp = power(base, exp / 2); return temp * temp; } } 

与之前的答案类似,这将很好地处理双正负整数幂。

 double intpow(double a, int b) { double r = 1.0; if (b < 0) { a = 1.0 / a; b = -b; } while (b) { if (b & 1) r *= a; a *= a; b >>= 1; } return r; } 

该函数的非recursion版本不是太难 – 在这里是整数:

 long powi(long x, unsigned n) { long p; long r; p = x; r = 1.0; while (n > 0) { if (n % 2 == 1) r *= p; p *= p; n /= 2; } return(r); } 

(例如,将代码提升为一个整数倍的代码 – 必须删除代码来处理倒数。)

 int power(int x,int y){ int r=1; do{ r*=r; if(y%2) r*=x; }while(y>>=1); return r; }; 

(迭代)

 int power(int x,int y){ return y?(y%2?x:1)*power(x*x,y>>1):1; }; 

(如果它必须是recursion的)

imo,algorithm肯定是O(logn)

或者你可以写权力函数,recursion作为额外的奖励

 int power(int x, int y){ if(y == 0) return 1; return (x * power(x,y-1) ); } 

是的,是的,我知道这是不太有效的空间和时间复杂性,但recursion只是更有趣!

这是如何 – http://algohub.blogspot.com/2014/04/exponentiation.html

它是一个分而治之的algorithm。将input分解成小部分,直到它变得可咀嚼并解决,然后使用小问题的结果逐步构build更大问题的解决scheme,直到解决了给定input的问题

它直截了当..如果你有问题,我知道