Muy buenas, acabo de registrarme en el foro puesto que tengo un problema al que no le veo solución. Estoy haciendo un programa que me devuelva los divisores de 1 al 1000 y me diga cual de los numeros cuenta con más divisores. Sin embargo siempre me devuelve 60 (con 12 divisores), y conté por ejemplo los de 1000 y me salen 16. Les dejo el código para que le den un vistazo puesto que estoy seguro que encontraran la solución.
#include <iostream>
using namespace std;
void divisors(int n)
{
for (int i=1; i<=n; i++)
{
if (n%i==0)
cout << i << endl;
}
}
long contaDivisors(int n)
{
long cd=0;
for (int i=1; i<=n; i++)
{
if (n%i==0)
cd++;
}
return cd;
}
int main()
{
long maxDivisors=0;
for (int num=1; num<=1000; num++)
{
if(contaDivisors(num)>=maxDivisors)
maxDivisors=num;
cout << endl << "Els divisors de " << num << " son:" << endl;
divisors(num);
}
cout << "\n\n\n";
cout << "El nombre mes gran amb mes numero de divisors es el " << maxDivisors << " amb " << contaDivisors(maxDivisors) << " divisors.";
cout << "\n\n\n";
return 0;
}
Salud!
if(contaDivisors(num)>=maxDivisors)
maxDivisors=num;
Estás guardando en maxDivisors, el número que tiene más divisores. pero en el if(), estás comprobando como si maxDivisors fuera el número de divisores más grande.
Tienes que usar 2 variables diferentes, una para guardar el número de divisores mayor, y otra para guardar el número que tiene esa cantidad de divisores.
Cierto!! Muchas gracias
brothercito echale un ojo a este codigo que hice:
#include <iostream>
using namespace std;
int main() {
int numero = 0, cont, mayor=0;
for(int i= 1; i <= 1000; i++ ){
cont=0;
for(int j= 1; j <= i; j++ ){
if(i % j == 0)
cont++;
}//
if(numero < cont){
numero = cont;
mayor = i;
}//for
/* OJO SI QUIERES SABER LOS DIVISORES DE TODOS LOS NUMEROS HASTA EL MIL
cout << "Numero: " << i <<" con un total de: " << cont << " divisores: "<< endl;
cout << "Los divisores son: ";
for(int k= 1; k <= i; k++){
if(i % k == 0)
cout << k << " ";
}//for
cout << endl;
*/
}//for
cout << endl;
cout << "El numero con mas divisores de 1000 es: " << mayor <<" con un total de: "
<< numero << " divisores"<< endl;
cout << "Los divisores son: ";
for(int k= 1; k <= mayor; k++){
if(mayor % k == 0)
cout << k << " ";
}//for
cout << endl;
return 0;
}//main
me anda de lujo por que veo como tratar el programa de distinta forma aunque no implementa funciones que era el tema que quería abordar con el problema el resultado es el mismo, gracias amigo