C: x a la potencia n usando cuadratura repetida sin función recursiva

Aquí está mi código calcula 2 elevado a la potencia 16

#include #include 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); } 

Quiero calcular esto cuando la potencia de x, es decir, n no es la potencia de 2. Por ejemplo, di n = 19, n = 43 etc.

Sospecho que usted está buscando exponenciación por cuadratura, que va así:

 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; } 

Para hacer que el código funcione para otras potencias realice estos cambios, multiplíquese por para obtener la potencia adicional.

 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