C:x使用重复平方而没有递归函数的幂n

时间:2014-04-15 09:18:58

标签: c

这是我的代码,它计算2提升到16的幂

#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不是2的幂时,例如。说n = 19,n = 43等

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);
}