2014-04-15 72 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