Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I make a program that counts the occurrence of each individual digit between 1 and 100?

I’m making a program that counts how many times each digit (0-9) occurs in each number between 1 to 100. At the end it will say something like:

The digit 0 showed up ____ times between 1-100
The digit 1 showed up ____ times between 1-100

and so forth.

This is what I have:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

public class CountEachDigit {

    public static void main(String[] args) {

        int counter =0;

        int[] digit = new int[10];

        for (int i=1;i<=100;i++) {
    
            for (int j=0;j<=9;j++){
  
                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(0)))
                            counter++;
                            digit[j]=counter;
                } catch (Exception e){
                    continue;
                }

                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(1)))
                        counter++;
                        digit[j]=counter;
                } catch (Exception e){
                    continue;
                }

                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(2)))
                        counter++;
                        digit[j]=counter;
                } catch (Exception e){
                    continue;
                }
    
            }
        }

        for (int j =0;j<=9;j++){
            System.out.println("The number "+j+" appears "+digit[j]+" times between 1 - 100.");
        }
    }
}

I tried changing the charAt each digit to a String to count the occurrence using the try and catch. No dice so far.

>Solution :

You do not need a string operations. You have to use x % 10 to get the last digit, and then x \= 10, to remove this last digit.

public class CountEachDigit {

    public static void main(String... args) {
        final int lo = 1;
        final int hi = 100;
        int[] digits = countDigits(lo, hi);

        for (int i = 0; i < 10; i++)
            System.out.format("The number %d appears %d times between %d - %d.\n", i, digits[i], lo, hi);
    }

    private static int[] countDigits(int lo, int hi) {
        int[] digits = new int[10];

        for (int i = lo; i <= hi; i++) {
            if (i == 0) {
                digits[0]++;
            } else {
                int val = i;

                do {
                    digits[val % 10]++;
                } while ((val /= 10) > 0);
            }
        }

        return digits;
    }

}

Demo:

The number 0 appears 11 times between 1 - 100.
The number 1 appears 21 times between 1 - 100.
The number 2 appears 20 times between 1 - 100.
The number 3 appears 20 times between 1 - 100.
The number 4 appears 20 times between 1 - 100.
The number 5 appears 20 times between 1 - 100.
The number 6 appears 20 times between 1 - 100.
The number 7 appears 20 times between 1 - 100.
The number 8 appears 20 times between 1 - 100.
The number 9 appears 20 times between 1 - 100.
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading