[Solucionado] Suma divisores de un número

Iniciado por RON06, 11 Noviembre 2010, 21:55 PM

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

RON06

Hola a tod@s!

Como dice el tema quiero hacer un programa en C++ que calcule la suma  de los divisores de un número.

Tengo el siguiente código:
#include <iostream>

using namespace std;

int main()
{
   //Declaración variables
   int n; //Entrada
   int s; // Salida
   int i; //Auxiliar

   cout << "INTRODUZCA UN NUMERO:" << endl;
   cin >> n;

   s=1; // 1 es divisor siempre

   for (i=2;i<=(n/2);i++) {
       if (n%i==0) {
           s=s+i;
       }
   }
   s=s+n; //Sumamos el numero inicial que es divisor de él mismo

   cout << "LA SUMA DE LOS DIVISORES DE " << n << " ES: " << s << endl;

   return 0;
}


El problema que tengo es que por números como el 6, 20 y otros funciona.
Pero por ejemplo por el 220 no.
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284

En mi programa la suma de divisores de 220 sale que es 504.

Alguien tiene idea de que puede fallar y cómo solucionarlo?

Gracias  :D

Akai

En algún momento has cometido un error de planteamiento respecto al problema.



Aqui tienes una muestra de como ejecuta tu código (con una pequeña variación para mostrar cada divisor).

Como podrás observar, los números imprimidos por pantalla coinciden con tu desarrollo, PERO en el programa hay algo más:

Código (cpp) [Seleccionar]
s=s+n; //Sumamos el numero inicial que es divisor de él mismo

Así que:
a) no has contemplado la propia suma de si mismo en tus cálculos a mano
o bien
b) esta suma sobra en el programa.
Según sea el planteamiento del problema, es uno u otro fallo.

RON06

Gracias Akai  ;D

Tenías razón, el error no estaba en el código, sinó en mis cálculos a mano.
Me olvidé de sumar el mismo número.
De esta manera si sale lo mismo.

1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 + 220= 504

:D

PD: Por cierto, gracias por la línea de código añadida, así veo los otros divisores  :rolleyes:

ShadowStorm

Cita de: Akai en 11 Noviembre 2010, 22:21 PM
En algún momento has cometido un error de planteamiento respecto al problema.



Aqui tienes una muestra de como ejecuta tu código (con una pequeña variación para mostrar cada divisor).

Como podrás observar, los números imprimidos por pantalla coinciden con tu desarrollo, PERO en el programa hay algo más:

Código (cpp) [Seleccionar]
s=s+n; //Sumamos el numero inicial que es divisor de él mismo

Así que:
a) no has contemplado la propia suma de si mismo en tus cálculos a mano
o bien
b) esta suma sobra en el programa.
Según sea el planteamiento del problema, es uno u otro fallo.

Cita de: RON06 en 11 Noviembre 2010, 22:47 PM
PD: Por cierto, gracias por la línea de código añadida, así veo los otros divisores  :rolleyes:

Faltaría imprimir el primer divisor que es 1.

Código (c++) [Seleccionar]

#include <iostream>

using namespace std;
int main()
{
    //Declaración variables
    int n; //Entrada
    int s; // Salida
    int i; //Auxiliar

    cout << "INTRODUZCA UN NUMERO:" << endl;
    cin >> n;

    s=0; // Almacena la suma de los divisores

    for (i=1;i<=(n/2);i++) { //1 es divisor siempre
        if (n%i==0) {
cout<<i<<endl; //Imprimimos los divisores
            s=s+i;
        }
    }
   //s=s+n; //Sumamos el numero inicial que es divisor de él mismo

    cout << "LA SUMA DE LOS DIVISORES DE " << n << " ES: " << s << endl;

   cout<<endl<<endl;
   cout<< "Presiona ENTER para salir";
   cin.sync();
   cin.get();

    return 0;
}

RON06

#4
Gracias ShadowStorm para mejorar/retocar aún más el código :D