_____________________________________________________________________________________
3.29 Se dice que un entero es un número perfecto, si la suma de sus factores, incluyendo 1 (pero no el número mismo), es igual al número. Por ejemplo, 6 es un número perfecto, ya que 6 = 1 + 2 + 3. Escriba una función Perfecto que determine si el parámetro número es un número perfecto. Utilice esta función en un programa que determine y despliegue todos los números perfectos entre el 1 y el 1000. Despliegue los factores de cada número perfecto para confirmar que en realidad el número es perfecto. Rete al poder de su computadora, probando números mucho mayores que 1000.
_____________________________________________________________________________________
Solución:
El siguiente programa imprime los numeros perfectos entre 1 y 1000. Un número perfecto es aquél que es igual a la suma de sus factores, incluyendo el 1 y desde luego excluyendo al propio número. Este problema también aparece resuelto en java: Deitel_Java_6.24
Una ejecución de este programa produce la siguiente salida:
Determinacion de numeros perfectos entre 1 y 1000. 6 es igual a la suma de: 1 2 3 28 es igual a la suma de: 1 2 4 7 14 496 es igual a la suma de: 1 2 4 8 16 31 62 124 248
Y éste es el código:
//Determina los numeros perfectos entre uno y mil. #include <iostream> using namespace std; int Perfect (int); void PrintPerfect(int); ////////////////////////////////////////////////////////// // MAIN ////////////////////////////////////////////////////////// int main() { // abre main int s; cout<<"Determinacion de numeros perfectos entre 1 y 1000."<<endl; for (int counter = 1; 1000 >= counter;++counter) { // Abre for s = Perfect (counter); if (1 == s) PrintPerfect (counter); } // Cierra for cout <<endl << endl; return 0; } // cierra main ////////////////////////////////////////////////////// // PERFECT ////////////////////////////////////////////////////// int Perfect (int n) { int suma = 0, factor; for (int divisor = 1; divisor < n; ++ divisor) { //Abre for if (0 == n % divisor) { // Abre if factor = divisor; suma += factor; } // Cierra if } //Cierra for if ( suma == n) return 1; else return 0; } /*//////////////////////////////////////////////////////////////// // PRINTPERFECT ////////////////////////////////////////////////////////////////*/ void PrintPerfect (int m) { cout <<endl<<endl<< m << "\tes igual a la suma de:"<<endl; for (int divisor = 1; divisor <m; ++divisor) if (0 == m%divisor) cout << divisor << "\t"; return; }
Gracias enserio :D!!!!!
ResponderEliminar¡Gracias a ti, Gisel!
Eliminarvarios años tarde, pero messirve ��
ResponderEliminargraias!!!!!!!