[Solved] Write a program which accepts two integers as a minimum and maximum limit and calculates total of how many 1s were their within the limit


I strongly advice looking into the math of your problem and come up with a clever algorithm that you then implement. The 1s are far from randomly distributed in a range of numbers that are count up 😉

However there is always the brute force approach.
(This is just to show a possibility and one of the worst ways to solve the problem)

    int count = 0;
    for(int i = 1; i<=11; i++)
    {
        String number = String.valueOf(i);
        while(number.contains("1"))
        {
            number= number.substring(number.indexOf("1")+1);
            count ++;
        }
    }
    System.out.println(count);

EDIT:
For those with an interest in better brute force version using log, mod and div (best I could come up with yet ^^):

    int count2 = 0;     
    for(int i = lowerbound; i<=upperbound; i++)
    {
        int temp = Math.abs(i); //make positive. No negative log 
        if(temp==0) //beware the log(0) trap 
            continue;
        int length = (int)(Math.log10(temp)+1); //count digits
        for(int j = length -1; j>=0 ; j--)  //inspect digit for digit
        {
            if(temp % 10 == 1)
            {
                count2 ++;
            }
            temp = temp / 10;
        }
    }

Tests done with a range from -1000000 to 1000000 measured with nano() (so no units). For CharAt approach see Tom Wellbrock s answer.
Even though log, % and / are quite slow mathematical operations the cost for a String creation is more expensive.

Without java Optimisation: :

  • SubString: 14000002 time taken:
    • 18351768293
  • Log: 14000002 time taken:
    • 2895089202
  • CharAt: 14000002 time taken:
    • 13929667983

With java optimisation (creating Strings becomes a lot cheaper then, especially when they appear twice and all the little tweaks why we love java so much)

  • SubString:14000002 time taken:
    • 1088103359
  • Log:14000002 time taken:
    • 568686169
  • CharAt:14000002 time taken:
    • 741721424

2

solved Write a program which accepts two integers as a minimum and maximum limit and calculates total of how many 1s were their within the limit