Find the number of positive integers less than or equal to N that have an odd number of digits - GeeksforGeeks

10 May, 2021
Given an integer N where 1 ≤ N ≤ 105, the task is to find the number of positive integers less than or equal to N that have an odd number of digits without leading zeros.Examples:  
Input: N = 11 Output: 9 1, 2, 3, ..., 8 and 9 are the numbers ≤ 11 with odd number of digits.Input: N = 893 Output: 803  
 
Naive approach: Traverse from 1 to N and for each number check if it contains odd digits or not.Efficient approach: For the values:  
When N < 10 then the count of valid numbers will be N.
When N / 10 < 10 then 9.
When N / 100 < 10 then 9 + N – 99.
When N / 1000 < 10 then 9 + 900.
When N / 10000 < 10 then 909 + N – 9999.
Otherwise 90909.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the number of// positive integers less than or equal// to N that have odd number of digitsint odd_digits(int n){    if (n < 10)        return n;    else if (n / 10 < 10)        return 9;    else if (n / 100 < 10)        return 9 + n - 99;    else if (n / 1000 < 10)        return 9 + 900;    else if (n / 10000 < 10)        return 909 + n - 9999;    else        return 90909;} // Driver codeint main(){    int n = 893;     cout << odd_digits(n);     return 0;}
// Java implementation of the approachclass GFG{ // Function to return the number of// positive integers less than or equal// to N that have odd number of digitsstatic int odd_digits(int n){    if (n < 10)        return n;    else if (n / 10 < 10)        return 9;    else if (n / 100 < 10)        return 9 + n - 99;    else if (n / 1000 < 10)        return 9 + 900;    else if (n / 10000 < 10)        return 909 + n - 9999;    else        return 90909;} // Driver codepublic static void main(String []args){    int n = 893;     System.out.println(odd_digits(n));}} // This code is contributed by 29AjayKumar
# Python3 implementation of the approach # Function to return the number of# positive integers less than or equal# to N that have odd number of digitsdef odd_digits(n) :     if (n < 10) :        return n;    elif (n / 10 < 10) :        return 9;    elif (n / 100 < 10) :        return 9 + n - 99;    elif (n / 1000 < 10) :        return 9 + 900;    elif (n / 10000 < 10) :        return 909 + n - 9999;    else :        return 90909; # Driver codeif __name__ == "__main__" :     n = 893;     print(odd_digits(n)); # This code is contributed by AnkitRai01
// C# implementation of the approachusing System;                     class GFG{ // Function to return the number of// positive integers less than or equal// to N that have odd number of digitsstatic int odd_digits(int n){    if (n < 10)        return n;    else if (n / 10 < 10)        return 9;    else if (n / 100 < 10)        return 9 + n - 99;    else if (n / 1000 < 10)        return 9 + 900;    else if (n / 10000 < 10)        return 909 + n - 9999;    else        return 90909;} // Driver codepublic static void Main(String []args){    int n = 893;     Console.WriteLine(odd_digits(n));}} // This code is contributed by 29AjayKumar
<script>// Java script implementation of the approach  // Function to return the number of// positive integers less than or equal// to N that have odd number of digitsfunction odd_digits( n){    if (n < 10)        return n;    else if (n / 10 < 10)        return 9;    else if (n / 100 < 10)        return 9 + n - 99;    else if (n / 1000 < 10)        return 9 + 900;    else if (n / 10000 < 10)        return 909 + n - 9999;    else        return 90909;} // Driver codelet n = 893;     document.write(odd_digits(n));  // This code is contributed by sravan kumar Gottumukkala</script>
803
 
ankthon
29AjayKumar
sravankumar8128
Constructive Algorithms
number-digits
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Find all factors of a natural number | Set 1
Check if a number is Palindrome
Program to print prime numbers from 1 to N.
Fizz Buzz Implementation
Program to multiply two matrices
Program to add two binary strings
Find Union and Intersection of two unsorted arrays
Count ways to reach the n'th stair
Add two numbers without using arithmetic operators
Program to convert a given number to words