Hola
picman, hice algunas modificaciones a tu código y funciona con los valores que probé, igualmente probalo vos porque lo hice rápido y puede tener alguna falla y seguramente se puede optimizar, pero esto te lo dejo a vos.
Código C:
Ver original#include <stdio.h>
int main() {
int num, divisor=2,expo=1, base=0;
printf("Introduce un numero:\n");
while(num>1){
/*Divide e incrementa el expo mientras la base sea la misma*/
if(num%divisor==0){
num=num/divisor;
base=divisor;
expo++;
}
else{
/*Este if es para numeros primos, entra con base==0 por si se ingresa
un primo al inicio o con expo==1 cuando se cambia de base. Ej: 5 o 10*/
if(base==0 || expo==1){
divisor++;
}
/*Si cambia la base se muestra primero la base y el expo anterior y se
pasa a la proxima base incrementanto del divisor y volviendo a 1 el expo.
Ej: num 6 -- 2*1 y 3*1*/
else{
printf("%d*%d", base
, (expo
-1)); divisor++;
expo=1;
}
}
/*Si se llega al 1 se imprime el valor anterior y se hace num=0 para salir
del while*/
if(num==1) {
printf("%d*%d", base
, (expo
-1)); num=0;
}
}
return 0;
}
Espero se entiendan los comentarios, si no, preguntame.
Saludos.
P/D: como podes ver, en mi código no es necesario poner num=0 ya que si num=1 sale igual porque el while es num>1, asi que esa linea está de más, por esto te decia que se puede optimizar.