R Examples

R Program - Count digits in an Integer



In R, count of digits in a given integer can be found out by using below mentioned methods.

Method 1: Using iteration

The method involves the following steps:

Input: MyNum
Step 1: Initialize the count = 0
Step 2: Iterate over MyNum while it is not zero.
   Step 2a: Update MyNum by MuNum %/% 10
   Step 2b: Increase count by 1
Step 3: Return count

Example:

Input: 564
count: 0

Iteration 1: 
    MyNum: 564 %/% 10 = 56
    count: 0 + 1 = 1

Iteration 2: 
    MyNum: 56 %/% 10 = 5
    count: 1 + 1 = 2

Iteration 3: 
    MyNum: 5 %/% 10 = 0
    count: 2 + 1 = 3

return count = 3

The below block of code shows the implementation of above concept:

#function to count number of digits
countDigits <- function(MyNum) {
  count <- 0

  #absolute value of input is taken
  #to handle negative integers
  MyNum =as.integer(abs(MyNum))
  
  while (MyNum != 0) {
    MyNum <- MyNum %/% 10
    count <- count + 1    
  }

  return (count)
}

x <- 123
y <- 459709
sprintf("%d contains: %d digits", x, countDigits(x))
sprintf("%d contains: %d digits", y, countDigits(y))

The above code will give the following output:

[1] "123 contains: 3 digits"
[1] "459709 contains: 6 digits"

Method 2: Using Recursion

The above result can also be achieved using recursive function:

#function to count number of digits
countDigits <- function(MyNum) {
  #absolute value of input is taken
  #to handle negative integers
  MyNum = as.integer(abs(MyNum))
  
  if(MyNum != 0) {
    return (1 + countDigits(MyNum%/%10))
  } else {
    return (0)
  }
}

x <- 564
y <- 980620
sprintf("%d contains: %d digits", x, countDigits(x))
sprintf("%d contains: %d digits", y, countDigits(y))

The above code will give the following output:

[1] "564 contains: 3 digits"
[1] "980620 contains: 6 digits"

Method 3: Using log function

The log (base-10) of absolute value of a given number can be used to find out the number of digits in a given number. Consider the example below:

#function to count number of digits
countDigits <- function(MyNum) {
  retval = as.integer(log10(abs(MyNum))) + 1
  return (retval)
}

x <- 564
y <- -12345
z <- 980620
sprintf("%d contains: %d digits", x, countDigits(x))
sprintf("%d contains: %d digits", y, countDigits(y))
sprintf("%d contains: %d digits", z, countDigits(z))

The above code will give the following output:

[1] "564 contains: 3 digits"
[1] "-12345 contains: 5 digits"
[1] "980620 contains: 6 digits"

Method 4: Using length of string

This can also be achieved by converting the absolute value of number into a string and then finding out the length of the string to get the number of digits in the original number. Consider the example below:

#function to count number of digits
countDigits <- function(MyNum) {
  MyStr = as.character(as.integer(abs(MyNum)))
  return (nchar(MyStr))
}

x <- 564
y <- -12345
z <- 980620
sprintf("%d contains: %d digits", x, countDigits(x))
sprintf("%d contains: %d digits", y, countDigits(y))
sprintf("%d contains: %d digits", z, countDigits(z))

The above code will give the following output:

[1] "564 contains: 3 digits"
[1] "-12345 contains: 5 digits"
[1] "980620 contains: 6 digits"