Cálculo del resultado de una potencia y una base sin matemática.

En mi universidad me pidieron que creara un progtwig que le pide al usuario dos entradas. Una es la base y la otra es el poder de un número. No se me permite usar math.h solo bucles.

Este es mi código hasta ahora:

 #include  int main() { int base; printf(" Please enter the base: "); scanf("%d", &base); int power; printf(" Please enter the power: "); scanf("%d", &power); printf("\n%d ^ %d is the same as...\n\n", base, power); printf(" %d", base); int reps; int number; for(reps = base; reps <= power; reps += 1) { printf("* %d ", base); } for(number; number <= power;number += 1) { int result = base * base; for (result; number <= power; result = base * result) { result = result * base; printf("\n or %d", result); } } return 0; } 

Por favor, ayúdame. Estoy tan perdido y tengo ganas de llorar 🙁 no es que importe.

(Su principal problema es que está usando una variable sin inicializar; el comportamiento de hacerlo en C es indefinido ).

Pero volvamos a trabajar la respuesta. Lo primero que debe hacer es separar la función de potencia real de todas las entradas y salidas. Con respecto a esa función, pondré mi forma favorita en el grupo de respuestas en el entendimiento de que lo trabajará con cuidado y lo entenderá.

Puede resolver este problema utilizando una técnica llamada exponenciación cuadrada :

 int getPower(int base, int power/*must be non-negative*/) { int ret = 1; while (power){ if (power & 1){ /*this means the current value of `power` is odd*/ ret *= base; } power >>= 1; /*ToDo - figure this out with your debugger*/ base *= base; } return ret; } 

El método se explica adecuadamente en https://en.wikipedia.org/wiki/Exponentiation_by_squaring

El bucle para calcular la potencia se ve así.

 int product = 1; for(int multiplicationCounter = 1;multiplicationCounter <= power; multiplicationCounter ++) { product *= base; } printf("Result is %d", product); 

Puede integrar esto en su código, tal vez cambiar la salida. Esto debería reemplazar tu segundo bucle completo.

Supongamos que tanto la base como la potencia son enteros positivos,

entonces

 int Result =1; for (int i=0; i<=power;i++) { if(power==0) Result=1; Result =Result*base; } 

Esto debería funcionar

 #include  int main() { int base; printf(" Please enter the base: "); scanf("%d", &base); int power; printf(" Please enter the power: "); scanf("%d", &power); printf("\n%d ^ %d is the same as...\n\n", base, power); printf(" %d", base); int reps; int number; int result=1: for(number=1; number <= power;number += 1) { result=result*base } printf("The result is %d", result); return 0; 

}