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
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:
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.
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:
Cita de: 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:
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.
#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;
}
Gracias ShadowStorm para mejorar/retocar aún más el código :D