Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: RON06 en 11 Noviembre 2010, 21:55 pm



Título: [Solucionado] Suma divisores de un número
Publicado por: RON06 en 11 Noviembre 2010, 21:55 pm
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:
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


Título: Re: [Ayuda] Suma divisores de un número
Publicado por: Akai en 11 Noviembre 2010, 22:21 pm
En algún momento has cometido un error de planteamiento respecto al problema.

(http://img261.imageshack.us/img261/1322/sinttulolk.png)

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
  1. 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.


Título: Re: [Solucionado] Suma divisores de un número
Publicado por: RON06 en 11 Noviembre 2010, 22:47 pm
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:


Título: Re: [Ayuda] Suma divisores de un número
Publicado por: ShadowStorm en 11 Noviembre 2010, 23:05 pm
En algún momento has cometido un error de planteamiento respecto al problema.

(http://img261.imageshack.us/img261/1322/sinttulolk.png)

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
  1. 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.

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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6.    //Declaración variables
  7.    int n; //Entrada
  8.    int s; // Salida
  9.    int i; //Auxiliar
  10.  
  11.    cout << "INTRODUZCA UN NUMERO:" << endl;
  12.    cin >> n;
  13.  
  14.    s=0; // Almacena la suma de los divisores
  15.  
  16.    for (i=1;i<=(n/2);i++) { //1 es divisor siempre
  17.        if (n%i==0) {
  18. cout<<i<<endl; //Imprimimos los divisores
  19.            s=s+i;
  20.        }
  21.    }
  22.   //s=s+n; //Sumamos el numero inicial que es divisor de él mismo
  23.  
  24.    cout << "LA SUMA DE LOS DIVISORES DE " << n << " ES: " << s << endl;
  25.  
  26.   cout<<endl<<endl;
  27.   cout<< "Presiona ENTER para salir";
  28.   cin.sync();
  29.   cin.get();
  30.  
  31.    return 0;
  32. }


Título: Re: [Ayuda] Suma divisores de un número
Publicado por: RON06 en 12 Noviembre 2010, 00:20 am
Gracias ShadowStorm para mejorar/retocar aún más el código :D