none
Convertir numero a lista de enteros RRS feed

  • Pregunta

  • Buenas tardes, tengo el siguiente  problema.

     Actualmente tengo que hacer un ejercicio el cual consiste en que ingresen un número y ese número convertirlo a una lista de enteros, a primera vista parece sencillo, pero cuando la prueba se hace con un número grande ("54117557424"), la consola se muere y mi pc igual se traba, ya que lo hago por medio de un for.

    Ej. Si el usuario ingresa 10, crear una lista de enteros del 1 al 10.

    Problema: hacer esto con números grandes "54117557424".

    Quiero saber si existe alguna manera de hacer esto de forma eficiente.

    La idea de hacer esto es por que tengo ejercicio el cual tiene que hacer lo siguiente:

    Si el usuario pone el número 5 tengo lograr lo siguiente:

    5/1(index array)=5

    5/2(index array)=2

    5/3=5/4=5/5=1

    Answer=5+2+1+1+1=10

    Saludos y gracias por su atención


    Hugo Gil



    • Editado Hugo Gil miércoles, 15 de enero de 2020 22:08 mas dtalle
    miércoles, 15 de enero de 2020 21:22

Todas las respuestas

  • Hola Hugo Gil

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que para que la comunidad de foros te pueda asesorar mejor, es necesario que nos compartas el form/code que estas desarrollando. Así la comunidad de este foro podrá ayudarte a corregir errores, sugerir mejoras y resolver dudas.

     

    Recuerda que en este foro no se resuelven tareas o proyectos escolares ni se desarrollan códigos en base a enunciados.

     

    Gracias por usar los foros de MSDN. 

     

    Diana Acuña 

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 15 de enero de 2020 23:01
    Moderador
  • hola

    >>Quiero saber si existe alguna manera de hacer esto de forma eficiente.

    limita el nro que se puede ingresar validandolo, un valor como el que mencionas no tiene sentido para un array

    Porque no usas el List<> que permite definir items dinamicamente a medida que los necesitas y no debes solicitar cuanto definir

    >>Si el usuario pone el número 5 tengo lograr lo siguiente

    no queda claro esa formula que defines

    para que necesitas un array si solo haces calculos con el nro que se ingreso, no necesitas definir una lista o array con esa cantidad de posiciones

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de enero de 2020 23:07
  • Hola Hugo

    Si sos principiante, como a otros les pasó que yo lo vi acá, entonces te mataron ...

    private void TuMetodo(int numero)  // hace lo que vos solicitaste
    {
        int a, val = 0;
        Console.WriteLine("Para el número: " + numero);
        for (a = 1; a <= numero; a++) 
        {
            val += numero / a;
            Console.Write("" + numero / a + (a == numero ? " = " : " + ");
        }
        Console.WriteLine("" + val);
    }
    

    No lo probé. Espero te sea útil.

    Saludos

    Pablo

    miércoles, 15 de enero de 2020 23:37
  • Que tal leandro, gracias por tomarte el tiempo, lo que pasa es que estoy haciendo unos ejercicios de hackerearth. Exactamente estoy tratando de hacer este "https://www.hackerearth.com/problem/algorithm/floor-sum-b4fa5319-89c96876/description/"

    En ese ejercicio viene ya la solución, pero no logro entender el algoritmo, no se si me lo pudieran explicar:

    Solución al problema:

    using System;
    using System.IO;
    
    
    
    public class FloorSum
    {
    
    
        private static long getIntFromConsole()
        {
            return long.Parse(Console.ReadLine());
        }
    
        public static void Main()
        {
            long t = getIntFromConsole();
    
            for (int i = 0; (i < t); i++)
            {
                long n = getIntFromConsole();
          
                Console.WriteLine(FloorSum.evaluate(n));
            }
    
        }
    
        private static long evaluate(long n)
        {
            long ans = 0;
            if ((n == 1))
            {
                return 1;
            }
    
            ans = (ans + (1 + n));
            //ans =  n;
    
            for (long i = 2; ((i * i) <= n); i++)
            {
                if ((i != (n / i)))
                {
                    ans = (ans + (i + (n / i)));
                }
                else
                {
                    ans = (ans + i);
                }
    
                long l = ((n / i) + 1);
                long h = ((n / (i - 1)) - 1);
                if ((l <= h))
                {
                    ans = (ans + (((h - l) + 1) * (i - 1)));
                }
    
            }
    
            return ans;
        }
    
    
    
    }

    Antes de ver yo la respuesta, lo que entendi es que si el usuario captura un número Ej. 5, lo que tiene que hacer mi programa es un array del 1 al 5.

    posteriormente lo que tendria que hacer es recorrer ese array y dividir 5 (numero que captura el usuario) entre valor del item que se esta recorriendo, guardar el entero del resultado e irlo sumando hassta que termine de recorrer el array.

    El problema que con esta logica, cuando la prueba es con un número grande, como es por medio de un for, se consumen muchos recursos y tiempo.

    Saludos.


    Hugo Gil

    jueves, 16 de enero de 2020 0:00
  • hola

    >>posteriormente lo que tendria que hacer es recorrer ese array

    en que parte del codigo visualizas la creacion de un array ? en el codigo que nos muestras no lo veo

    >>como es por medio de un for, se consumen muchos recursos y tiempo

    si tiene que iterar muchos numeros seguro

    existe la posibilidad de paralelizar usando thread, pero eso aplicaria complejidad en el codigo

    necesitas que de verdad el codigo del ejemplo procese numeros tan grandes o poniendo algo razonable no alcanza para el objetivo

    si es asi de ultima podrias validad el input limitando a un valor razonable y no dejando al usuario que ingrese cualquier valor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 16 de enero de 2020 5:38