es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo contar los ceros iniciales en una cadena como su longitud?

Tengo que hacer este programa tipo calculadora, que cuente el número de elementos en una cadena como números (tengo que usar una cadena porque debo manejar el desbordamiento de enteros).
Estoy teniendo el problema de que no cuenta los primeros ceros, por ejemplo:
El conteo de 1233 sería 4
El conteo de 0001233 seguiría siendo 4, pero necesito que añada los primeros 000 para que sea 7.
¿Alguna idea de cómo implementar esto sin muchos cambios?

package com.company;

import java.math.BigInteger;
import java.util.*;

public class Main {

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    System.out.print("Ingrese su número aquí: ");

    BigInteger input = scan.nextBigInteger();
    String inputstr = input.toString();
    System.out.println("Número de elementos: " + inputstr.length());
    System.out.println("Número de números diferentes: " + inputstr.chars().distinct().count());
    int number = input.intValue();
    int even_count=0;
    int odd_count=0;

    while (number>0){
        int rem=number%10;

        if (rem%2==0){
            even_count++;
        }
        else{
            odd_count++;
        }
        number=number/10;
    }
    System.out.println("Números pares: "+ even_count);
    System.out.println("Números impares: "+ odd_count);

    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para contar los ceros iniciales en la cadena de entrada, puedes usar el método indexOf de la clase String, con el parámetro "[1-9]", el cual retornará el índice del primer dígito distinto de cero en la cadena. Luego, puedes restar este índice a la longitud de la cadena para obtener el conteo total de elementos en la cadena como números, incluyendo los ceros iniciales. Aquí está el código modificado:

    package com.company;
    
    import java.math.BigInteger;
    import java.util.*;
    
    public class Main {
    
        public static void main(String[] args) {
    
            Scanner scan = new Scanner(System.in);
            System.out.print("Ingresa tu número aquí: ");
    
            BigInteger input = scan.nextBigInteger();
            String inputstr = input.toString();
            int leading_zeros = inputstr.indexOf("[1-9]");
            if (leading_zeros == -1) {
                // La entrada contiene solo ceros
                leading_zeros = inputstr.length() - 1;
            }
            System.out.println("Número de elementos: " + (inputstr.length() + leading_zeros));
            System.out.println("Número de números diferentes: " + inputstr.chars().distinct().count());
            int number = input.intValue();
            int even_count=0;
            int odd_count=0;
    
            while (number>0){
                int rem=number%10;
    
                if (rem%2==0){
                    even_count++;
                }
                else{
                    odd_count++;
                }
                number=number/10;
            }
            System.out.println("Números pares: "+ even_count);
            System.out.println("Números impares: "+ odd_count);
    
        }
    }
    

    Ten en cuenta que la expresión regular "[1-9]" coincide con cualquier dígito diferente de cero, por lo que si la cadena de entrada contiene solo ceros, indexOf retornará -1 y debemos manejar este caso especial estableciendo leading_zeros como la longitud de la cadena menos 1.

Comments are closed.