Código
#include <iostream> using namespace std; int main (void) { int n, i, prime[5] = {2, 3, 5, 7, 11}; cout << "Numero? "; cin >> n; while (n != 1) { for (i=0; i<5; i++) { if (n%prime[i] == 0) { n = n / prime[i]; cout << prime [i] << endl; } } } cin.ignore(); cin.get(); }
El programa funciona a la perfección (bueno, de momento solo tengo puestos 5 primos en el array, pero se cambia fácilmente eso), pero al pedirle que te descomponga ciertos números, como el 20, no muestra los factores ordenados, es decir, en lugar de 2 2 5, muestra 2 5 2. Es cierto que esto no importa en una multiplicación, pero me gusta tener las cosas ordenadas y bonitas xD.
En mi programa de Python esto lo solucionaba añadiendo los factores a una lista en lugar de mostrarlos y luego ordenar e mostrar la lista, pero no encuentro forma de hacer esto en C++, y si la hay sería bastante código que añadir.
Sin embargo, me puse a pensar, y simplemente con algo que me permitiese "reiniciar" el bucle for para que empezara de nuevo a comprobar todos los números funcionaría, pero no sé como hacer esto. Alguna idea? Gracias de antemano.
PD: Soy bastante nuevo en C++ y programando en general, si encontrais cosas que se puedan hacer mejor comentadlo sin problemas, estare agradecido