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