Problema en ejercicio con funciones

Iniciado por darkeado, 9 Agosto 2015, 17:02 PM

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

darkeado

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!

ivancea96

Código (cpp) [Seleccionar]
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.

darkeado


exoesqueleto

brothercito echale un ojo a este codigo que hice:

Código (cpp) [Seleccionar]


#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


darkeado

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