Find the smallest number whose sum of digits is N - GeeksforGeeks

05 Apr, 2021
Given a positive integers N, the task is to find the smallest number whose sum of digits is N.Example:  
Input: N = 10
Output: 19
Explanation:
1 + 9 = 10 = N

Input: N = 18
Output: 99
Explanation:
9 + 9 = 18 = N
 
Naive Approach:  
A Naive approach is to run a loop of i starting from 0 and find Sum of digits of i and check if it’s equal to N or not.  
Below is the implementation of the above approach. 
C++
Java
Python3
C#
Javascript
// C++ program to find the smallest// number whose sum of digits is also N#include <iostream>#include <math.h>using namespace std; // Function to get sum of digitsint getSum(int n){    int sum = 0;    while (n != 0) {        sum = sum + n % 10;        n = n / 10;    }    return sum;} // Function to find the smallest// number whose sum of digits is also Nvoid smallestNumber(int N){    int i = 1;    while (1) {        // Checking if number has        // sum of digits = N        if (getSum(i) == N) {            cout << i;            break;        }        i++;    }} // Driver codeint main(){    int N = 10;    smallestNumber(N);     return 0;}
// Java program to find the smallest// number whose sum of digits is also Nclass GFG{ // Function to get sum of digitsstatic int getSum(int n){    int sum = 0;    while (n != 0)    {        sum = sum + n % 10;        n = n / 10;    }    return sum;} // Function to find the smallest// number whose sum of digits is also Nstatic void smallestNumber(int N){    int i = 1;    while (1 != 0)    {        // Checking if number has        // sum of digits = N        if (getSum(i) == N)        {            System.out.print(i);            break;        }        i++;    }} // Driver codepublic static void main(String[] args){    int N = 10;    smallestNumber(N);}} // This code is contributed// by shivanisinghss2110
# Python3 program to find the smallest# number whose sum of digits is also N # Function to get sum of digitsdef getSum(n):     sum1 = 0;    while (n != 0):        sum1 = sum1 + n % 10;        n = n // 10;         return sum1; # Function to find the smallest# number whose sum of digits is also Ndef smallestNumber(N):     i = 1;    while (1):        # Checking if number has        # sum of digits = N        if (getSum(i) == N):            print(i);            break;                 i += 1;     # Driver codeN = 10;smallestNumber(N); # This code is contributed by Code_Mech
// C# program to find the smallest// number whose sum of digits is also Nusing System; class GFG{ // Function to get sum of digitsstatic int getSum(int n){    int sum = 0;    while (n != 0)    {        sum = sum + n % 10;        n = n / 10;    }    return sum;} // Function to find the smallest// number whose sum of digits is also Nstatic void smallestNumber(int N){    int i = 1;    while (1 != 0)    {                 // Checking if number has        // sum of digits = N        if (getSum(i) == N)        {            Console.Write(i);            break;        }        i++;    }} // Driver codepublic static void Main(String[] args){    int N = 10;         smallestNumber(N);}} // This code is contributed by Amit Katiyar
<script> //Javascript program to find /the smallest// number whose sum of digits is also N  // Function to get sum of digitsfunction getSum(n){    let sum = 0;    while (n != 0) {        sum = sum + n % 10;        n = Math.floor(n / 10);    }    return sum;}  // Function to find the smallest// number whose sum of digits is also Nfunction smallestNumber(N){    let i = 1;    while (1) {        // Checking if number has        // sum of digits = N        if (getSum(i) == N) {            document.write(i);            break;        }        i++;    }}  // Driver code     let N = 10;    smallestNumber(N);       // This code is contributed by Mayank Tyagi </script>
19
Time Complexity: O(N).Efficient Approach:  
An efficient approach to this problem is an observation. Let’s see some examples. If N = 10, then ans = 19If N = 20, then ans = 299If N = 30, then ans = 3999
If N = 10, then ans = 19
If N = 20, then ans = 299
If N = 30, then ans = 3999
So, it is clear that the answer will have all digits as 9 except the first one so that we get the smallest number.
So, the Nth term will be =
 
Below is the implementation of the above approach  
 
C++
Java
Python3
C#
Javascript
// C++ program to find the smallest// number whose sum of digits is also N#include <iostream>#include <math.h>using namespace std; // Function to find the smallest// number whose sum of digits is also Nvoid smallestNumber(int N){    cout << (N % 9 + 1)                    * pow(10, (N / 9))                - 1;} // Driver codeint main(){    int N = 10;    smallestNumber(N);     return 0;}
// Java program to find the smallest// number whose sum of digits is also Nclass GFG{  // Function to find the smallest// number whose sum of digits is also Nstatic void smallestNumber(int N){    System.out.print((N % 9 + 1) *            Math.pow(10, (N / 9)) - 1);}  // Driver codepublic static void main(String[] args){    int N = 10;    smallestNumber(N);}} // This code is contributed by sapnasingh4991
# Python3 program to find the smallest# number whose sum of digits is also N # Function to find the smallest# number whose sum of digits is also Ndef smallestNumber(N):     print((N % 9 + 1) * pow(10, (N // 9)) - 1) # Driver codeN = 10smallestNumber(N) # This code is contributed by Code_Mech
// C# program to find the smallest// number whose sum of digits is also Nusing System;class GFG{ // Function to find the smallest// number whose sum of digits is also Nstatic void smallestNumber(int N){    Console.WriteLine((N % 9 + 1) *             Math.Pow(10, (N / 9)) - 1);} // Driver codepublic static void Main(){    int N = 10;         smallestNumber(N);}} // This code is contributed by Ritik Bansal
<script>     // Javascript program to find the smallest    // number whose sum of digits is also N         // Function to find the smallest    // number whose sum of digits is also N    function smallestNumber(N)    {        document.write( (N % 9 + 1) * Math.pow(10, parseInt(N / 9, 10)) - 1 );    }         let N = 10;    smallestNumber(N);     </script>
19
sapnasingh4991
bansal_rtk_
shivanisinghss2110
amit143katiyar
Code_Mech
mananman23
mayanktyagi1709
divyesh072019
number-digits
Mathematical
School Programming
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Program to find GCD or HCF of two numbers
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program to find sum of elements in a given array
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
Interfaces in Java