2014-04-15 42 views
0

这里是我的代码是计算2提高到16C:X n次幂使用重复的平方不递归函数

#include<stdio.h> 
#include<math.h> 

int main() 
{ 
    int i; 
    long int x=2; 
    int n=16; 
    int k=log(n)/log(2); 
    for(i=1;i<=k;i++) 
    { 
     x=x*x; 
    } 
    printf("%d",x); 
    printf("\n%d",k); 
} 

我要计算这个权力当x即n次方是不对...的权力说N = 19,N = 43等

+0

在你显示的例子中没有递归。 – devnull

+0

@devnull这显然也是要求。 – Lundin

+0

你明白它背后的数学吗?是不可能的。递归也与它无关。 – luk32

回答

3

我怀疑你正在寻找exponentiation by squaring这是这样的:

unsigned int intpow(unsigned int base, unsigned int exponent) 
{ 
    unsigned int result = 1; 
    while (exponent > 0) 
    { 
     while ((exponent & 1) == 0) 
     { 
      exponent /= 2; 
      base *= base; 
     } 
     exponent--; 
     result *= base; 
    } 
    return result; 
} 
+0

这实际上是一种有效的做法,我正在寻找。它花了0.029秒,而我的代码花了.067 s – Sunny

1

为了使代码工作的其他职权做出这些改变,乘以得到额外的权力。

int main() 
{ 
int i; 
long int x=2; 
int n=7; 
int k=log(n)/log(2); 
int y,z; 
y=n-pow(2,k); 
z=1; 
for(i=0;i<y;i++) 
{ 
    z*=x; 
} 
for(i=1;i<=k;i++) 
{ 
x=x*x; 
} 
x=x*z; 
printf("%d",x); 
printf("\n%d",k); 
} 
+1

您使用'pow'这有点击败运动methinks的目的 –

+0

谢谢我认为多数民众赞成我一直在寻找:) – Sunny