Programa Numeros Perfectos C++

Iniciado por HIDE_95, 4 Agosto 2015, 20:31 PM

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

HIDE_95

Buenas compañeros. Tengo una pequeño problema en el que me he quedado atrancado .... Se trata de este ejercicio:
 Un numero perfecto es un numero natural cuyo valor coincide con la suma de todos sus divisores propios,
es decir todos sus divisores menores que el (incluido el 1). Por ejemplo, el numero 28 se dice que es un
numero perfecto porque su valor coincide con la suma de sus divisores: 28 = 1 + 2 + 4 + 7 + 14
.
 Escribir un programa en C++ que lea por teclado un numero de cifras (mayor que 1) e imprima por pantalla el primer numero perfecto con ese numero de cifras o, en caso de que no exista, imprima un
mensaje indicando que no existe un numero perfecto con ese numero de cifras.


Aqui esta el algoritmo que yo cree , pero no me funciona. Me deja compilarlo pero al poner el numero de cifras deseado no me saca nada por pantalla... Podriais indicarme un poco en que he fallado , gracias :)

Código (cpp) [Seleccionar]
#include <iostream>
#include <math.h>

using namespace std ;

int main ()
{
unsigned n , b , a , perf ;
cout << "Introduzca el numero de cifras: " ;
cin >> n ;
b = pow ( 10 , n) - 1 ;
perf = 0 ;
for ( unsigned i = pow(10 , (n-1)) ; i <= b ; i++ )
{
for (unsigned j = 2 ; j <= i ; j++ )
{
if ( (i % j) == 0 )
{
a = i / j ;
perf = a + perf ;

}
}
if ( perf == i )
{
cout << "Numero perfecto: " << perf << endl ;

}
}

}



Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

lo de la linea 12

perf = 0 ;

está fuera del ciclo... así que nunca se reiniciará... debe reiniciarse a 0 con cada nuevo "i" (es decir pasa linea 13 para linea 12 y linea 12 para 13)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

HIDE_95

Muchisimas gracias... Llevo toda la tarde buscandole el fallo