Saturday, October 11, 2025
HomeData Modelling & AIMinimum number with digits as 4 and 7 only and given sum

Minimum number with digits as 4 and 7 only and given sum

Lucky numbers are the positive integers whose decimal representations contain only the lucky digits 4 and 7. 
What minimum lucky number has the sum of digits equal to n. 

Examples: 

Input : sum = 11
Output : 47
Sum of digits in 47 is 11 and 47
is the smallest number with given sum.

Input :  sum = 10
Output : -1    
Recommended Practice

The approach is based on below facts :  

  1. Since digits are 4 and 7 only, given digit sum can be written as a*4 + b*7 = sum where a and b are some positive integers (greater than or equal to 0) representing number of 4s and 7s respectively.
  2. Since we need to find minimum number, the result would always be in the form which has all 4s first, then all 7s, i.e., 44…477…7.

We basically need to find values of ‘a’ and ‘b’. We find these values using below facts:  

  1. If sum is multiple of 4, then result has all 4s.
  2. If sum is multiple of 7, then result has all 7s.
  3. If sum is not multiple of 4 or 7, then we can subtract one of them till sum becomes multiple of other.

C++




// C++ program to find smallest number
// with given sum of digits.
#include <bits/stdc++.h>
using namespace std;
 
// Prints minimum number with given digit
// sum and only allowed digits as 4 and 7.
void findMin(int sum)
{
    int a = 0, b = 0;
    while (sum > 0)
    {
        // Cases where all remaining digits
        // are 4 or 7 (Remaining sum of digits
        // should be multiple of 4 or 7)
        if (sum % 7 == 0)
        {
            b++;
            sum -= 7;
        }
        else if (sum % 4 == 0)
        {
            a++;
            sum -= 4;
        }
 
        // If both 4s and 7s are there
        // in digit sum, we subtract a 4.
        else
        {
            a++;
            sum -= 4;
        }
    }
 
    if (sum < 0)
    {
        printf("-1n");
        return;
    }
 
    for (int i=0; i<a; i++)
        printf("4");
 
    for (int i=0; i<b; i++)
        printf("7");
 
    printf("n");
}
 
// Driver code
int main()
{
    findMin(15);
    return 0;
}


Java




// Java program to find smallest number
// with given sum of digits.
import java.io.*;
 
class GFG {
     
    // Prints minimum number with given digit
    // sum and only allowed digits as 4 and 7.
    static void findMin(int sum)
    {
        int a = 0, b = 0;
        while (sum > 0)
        {
            // Cases where all remaining digits
            // are 4 or 7 (Remaining sum of digits
            // should be multiple of 4 or 7)
            if (sum % 7 == 0)
            {
                b++;
                sum -= 7;
            }
            else if (sum % 4 == 0)
            {
                a++;
                sum -= 4;
            }
     
            // If both 4s and 7s are there
            // in digit sum, we subtract a 4.
            else
            {
                a++;
                sum -= 4;
            }
        }
     
        if (sum < 0)
        {
            System.out.print("-1n");
            return;
        }
     
        for (int i = 0; i < a; i++)
            System.out.print("4");
             
        for (int i = 0; i < b; i++)
            System.out.print("7");
             
        System.out.println();
    }
     
    // Driver code
    public static void main(String args[])
                            throws IOException
    {
        findMin(15);
    }
}
 
/* This code is contributed by Nikita tiwari.*/


Python3




# Python program to find smallest number
# with given sum of digits.
 
# Prints minimum number with given digit
# sum and only allowed digits as 4 and 7.
def findMin(s):
    a, b = 0, 0
    while (s > 0):
         
        # Cases where all remaining digits
        # are 4 or 7 (Remaining sum of digits
        # should be multiple of 4 or 7)
        if (s % 7 == 0):
            b += 1
            s -= 7
        else if (s % 4 == 0):
            a += 1
            s -= 4
 
        # If both 4s and 7s are there
        # in digit sum, we subtract a 4.
        else:
            a += 1
            s -= 4
 
    string = ""
    if (s < 0):
        string = "-1"
        return string
     
     
    string += "4" * a
    string += "7" * b
     
    return string
 
# Driver code
print(findMin(15))
 
# This code is contributed by Sachin Bisht


C#




// C# program to find smallest number
// with given sum of digits.
using System;
 
class GFG {
     
    // Prints minimum number with given digit
    // sum and only allowed digits as 4 and 7.
    static void findMin(int sum)
    {
        int a = 0, b = 0;
        while (sum > 0)
        {
             
            // Cases where all remaining digits
            // are 4 or 7 (Remaining sum of digits
            // should be multiple of 4 or 7)
            if (sum % 7 == 0)
            {
                b++;
                sum -= 7;
            }
            else if (sum % 4 == 0)
            {
                a++;
                sum -= 4;
            }
     
            // If both 4s and 7s are there
            // in digit sum, we subtract a 4.
            else
            {
                a++;
                sum -= 4;
            }
        }
     
        if (sum < 0)
        {
            Console.Write("-1n");
            return;
        }
     
        for (int i = 0; i < a; i++)
            Console.Write("4");
             
        for (int i = 0; i < b; i++)
            Console.Write("7");
             
        Console.WriteLine();
    }
     
    // Driver code
    public static void Main()
    {
        findMin(15);
    }
}
 
// This code is contributed by Nitin Mittal.


PHP




<?php
// PHP program to find smallest number
// with given sum of digits.
 
// Prints minimum number with given digit
// sum and only allowed digits as 4 and 7.
function findMin($sum)
{
    $a = 0;
    $b = 0;
    while ($sum > 0)
    {
         
        // Cases where all remaining digits
        // are 4 or 7 (Remaining sum of digits
        // should be multiple of 4 or 7)
        if ($sum % 7 == 0)
        {
            $b++;
            $sum -= 7;
        }
        else if ($sum % 4 == 0)
        {
            $a++;
            $sum -= 4;
        }
 
        // If both 4s and 7s are there
        // in digit sum, we subtract a 4.
        else
        {
            $a++;
            $sum -= 4;
        }
    }
 
    if ($sum < 0)
    {
        echo("-1n");
        return;
    }
 
    for ($i = 0; $i < $a; $i++)
        echo("4");
 
    for ($i = 0; $i < $b; $i++)
        echo("7");
 
    echo("\n");
}
 
    // Driver code
    findMin(15);
     
// This code is contributed by nitin mittal
?>


Javascript




<script>
 
// Javascript program to find smallest number
// with given sum of digits.
 
// Prints minimum number with given digit
// sum and only allowed digits as 4 and 7.
function findMin(sum)
{
    var a = 0, b = 0;
     
    while (sum > 0)
    {
         
        // Cases where all remaining digits
        // are 4 or 7 (Remaining sum of digits
        // should be multiple of 4 or 7)
        if (sum % 7 == 0)
        {
            b++;
            sum -= 7;
        }
        else if (sum % 4 == 0)
        {
            a++;
            sum -= 4;
        }
 
        // If both 4s and 7s are there
        // in digit sum, we subtract a 4.
        else
        {
            a++;
            sum -= 4;
        }
    }
 
    if (sum < 0)
    {
        document.write("-1n");
        return;
    }
 
    for(i = 0; i < a; i++)
        document.write("4");
 
    for(i = 0; i < b; i++)
        document.write("7");
 
    document.write();
}
 
// Driver code
findMin(15);
 
// This code is contributed by todaysgaurav
 
</script>


Output: 

447

Time Complexity: O(sum).

This article is contributed by Amit. If you like neveropen and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the neveropen main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Dominic
32352 POSTS0 COMMENTS
Milvus
87 POSTS0 COMMENTS
Nango Kala
6720 POSTS0 COMMENTS
Nicole Veronica
11885 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11941 POSTS0 COMMENTS
Shaida Kate Naidoo
6840 POSTS0 COMMENTS
Ted Musemwa
7104 POSTS0 COMMENTS
Thapelo Manthata
6795 POSTS0 COMMENTS
Umr Jansen
6794 POSTS0 COMMENTS