这是我的代码,它计算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等
答案 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);
}