duda sobre elevar la potencia sin usar la multiplicación?

Iniciado por jorge.esquibel, 18 Septiembre 2018, 04:16 AM

0 Miembros y 1 Visitante están viendo este tema.

jorge.esquibel

Si uso la multiplicación el código me quedaría así:
#include <stdio.h>

int main(int argc, char *argv[]) {
int acum=1,i,base,exponente;

printf("Digite la base: ");
scanf("%d",&base);
printf("Digite el exponente: ");
scanf("%d",&exponente);



for(i=1;i<=exponente;i++){
acum=acum*base; //el "*" no debe ser usado
}
printf("Resultado: %d",acum);
return 0;
}


Si se tiene que crear un código sin usar los operadores o condiciones de multiplicación o funciones de exponentes y la única regla es usar sumas.

Lo que se me ocurre es cambiar el acum=1 a acum=0.
acum= acum*base; a acum= acum+base;
pero en el ciclo for (i=1;i<=exponente;i++) el valor de exponente no me ayuda quedaría así mas o menos:

#include <stdio.h>

int main(int argc, char *argv[]) {
int acum=0,i,base,exponente;

printf("Digite la base: ");
scanf("%d",&base);
printf("Digite el exponente: ");
scanf("%d",&exponente);



for(i=1;i<=exponente;i++){ /*la cantidad de veces que se sumara la base es lo que se pondra en el exponente. */
acum=acum+base;
}
printf("Resultado: %d",acum);
return 0;
}



MAFUS

#1
Ya que la multiplicación son sumas sucesivas y la exponenciación son multiplicaciones sucesivas, pues haces cada operación en funciones separadas: en una multiplicas usando sumas y en la otra, aprovechando la primera, elevas con multiplicaciones sucesivas. Algo así:

#include <stdio.h>

int func_mul(int m, int n) {
    int retval = 0;
    int negativo = n<0;

    if(negativo)
        n = -n;

    while(n--)
        retval += m;

    return negativo? -retval : retval;
}

int func_exp(int base, unsigned ex) {
    int retval = 1;

    while(ex--)
        retval = func_mul(retval, base);

    return retval;
}

int main() {
    int x;
    unsigned y;

    printf("base > ");
    scanf("%d", &x);
    printf("exp  > ");
    scanf("%d", &y);
    printf("%d", func_exp(x, y));
}