DEV Community

Ajay k
Ajay k

Posted on

Find the number of digits

To day we are going to look into the basic DSA Problem

Find the number of digits for the given number

let's look how we can solve this problem in different way

we assume all the input given to the program is Greater than Zero and with no leading Zeros for simplicity.

For number with Leading Zeros we have Different Technique which we can see later.

we are going to solve the problem in following methods

  1. Iteration Method
  2. Recursive Method
  3. Using Log10 Method

Let's look into iterative method the most common solution

public int countByIteration(int number) {
    int count = 0;
    while (number > 0) {
      ++count;
      number = number / 10;
    }
    return count;
  }
Enter fullscreen mode Exit fullscreen mode

consider the given input is 123, we have 3 digits
Here we are initialise a variable count to store the number of digits
int count =0;

we have create a while loop which checks is the given number is greater than Zero.

while(number>0){}

123 is greater than Zero, so it enters inside the while loop

Inside the while loop we are incrementing the count value since the number (123) is not Zero (now count=1)

NOTE:- when you divide 2 integers in java 12/10 its 1 not 1.2(result is int), when you divide 2 double in java 12.00/10.00 its 1.2
not 1(result is double) and if you divide one integer and one double 12.00/10 its 1.2(result is double)

we divide the number(123) by 10, which makes 123 to 12

now while loop is going to check is 12 greater than 0 ,since 12 is greater than 0 it again enters the while loop and increment the count value (now count = 2)

we divide the number(12) by 10, which makes 12 to 1

now while loop is going to check is 1 greater than 0 ,since 1 is greater than 0 it again enters the while loop and increment the count value (now count = 3)

we divide the number(1) by 10, which make 1 to 0

now while loop is going to check is 0 greater than 0, since its not true while loop wont execute

after while loop we have the return statement which is going to return the count(count =3)

Time Complexity : O(n) 
Auxiliary Space : O(1) 
Enter fullscreen mode Exit fullscreen mode

Now it's time for Recursive Method

  public int countByRecursion(int number) {
    if (number == 0) {
      return 0;
    }
    return 1 + countByRecursion(number / 10);
  }
Enter fullscreen mode Exit fullscreen mode

The base condition is going to check is the number is 0 or not
if its Zero its going to return us 0 and stops the recursive call

if not we are making a recursive call by dividing the number by 10 and adding that call result with 1

Time Complexity : O(log(n)) 
Auxiliary Space : O(log(n))
Enter fullscreen mode Exit fullscreen mode

Now the Log Method

public int countByLog(int number) {
    return (int) Math.floor(Math.log10(number) + 1);
  }
Enter fullscreen mode Exit fullscreen mode

Looks simple right!!! and this is also the efficient method when compared to countByRecursion and countByIteration

the idea behind this is when we do log10(123) its going to give us 2.089905111439398 if we take floor we get 2.0 and then we add 1 to it so it becomes 3.0 at last we cast that to int so it becomes 3

Time Complexity : O(1)
Auxiliary Space : O(1)
Enter fullscreen mode Exit fullscreen mode

If you are at interview you can use the Log method.

This is a part of my DSA preparation series
Day 1 to 9 : Analysis of Algorithm
Day 10 : Find the number of digits

Top comments (2)

Collapse
 
jonrandy profile image
Jon Randy 🎖️
const countDigits = x=>(''+x).length
Enter fullscreen mode Exit fullscreen mode
Collapse
 
ajayk profile image
Ajay k

That's great 🎉