📌  相关文章
📜  仅由数字 0 和 9 组成的给定数字的最小倍数

📅  最后修改于: 2022-05-13 01:57:00.749000             🧑  作者: Mango

仅由数字 0 和 9 组成的给定数字的最小倍数

给定一个整数 N。 我们需要编写一个程序来找出仅由数字 9 和 0 组成的最小正整数 X,使得 X 是 N 的倍数。

:假设 X 的值不超过 10 6

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。

例子:



Input : N = 5
Output : X = 90
Exaplanation: 90 is the smallest number made up 
of 9's and 0's which is divisible by 5.

Input : N = 7
Output : X = 9009
Exaplanation: 9009 is smallest number made up 
of 9's and 0's which is divisible by 7.

解决这个问题的想法是生成并存储所有可以用数字 0 和 9 组成的数字。然后在这些生成的数字中找到能被 N 整除的最小数字。

我们将使用生成二进制数的方法生成所有可以使用数字 0 和 9 组成的数字。

下面是上述想法的实现:

C++
// CPP program to find smallest multiple of a 
// given number made of digits 0 and 9 only
#include 
using namespace std;
  
// Maximum number of numbers made of 0 and 9
#define MAX_COUNT 10000
  
// vector to store all numbers that can be formed
// using digits 0 and 9 and are less than 10^5
vector vec;
  
/* Preprocessing function to generate all possible 
   numbers formed by 0 and 9 */
void generateNumbersUtil()
{   
    // Create an empty queue of strings
    queue q;
          
    // enque the first number
    q.push("9");
      
    // This loops is like BFS of a tree with 9 as root
    // 0 as left child and 9 as right child and so on
    for (int count = MAX_COUNT; count > 0; count--)
    {
        string s1 = q.front();
        q.pop();
          
        // storing the front of queue in the vector
        vec.push_back(s1);
          
        string s2 = s1;
          
        // Append "0" to s1 and enqueue it
        q.push(s1.append("0"));
          
        // Append "9" to s2 and enqueue it. Note that
        // s2 contains the previous front
        q.push(s2.append("9"));
    }
}
  
// function to find smallest number made up of only 
// digits 9’s and 0’s, which is a multiple of n.
string findSmallestMultiple(int n)
{   
    // traverse the vector to find the smallest
    // multiple of n
    for (int i = 0; i < vec.size(); i++)
  
        // stoi() is used for string to int conversion
        if (stoi(vec[i])%n == 0) 
            return vec[i];        
}
  
// Driver Code
int main()
{
    generateNumbersUtil();    
    int n = 7;    
    cout << findSmallestMultiple(n);    
    return 0;
}


Java
// Java program to find smallest 
// multiple of a given number 
// made of digits 0 and 9 only
import java.util.*;
  
class GFG 
{
  
    // Maximum number of 
    // numbers made of 0 and 9
    static int MAX_COUNT = 10000;
  
    // vector to store all numbers 
    // that can be formed using 
    // digits 0 and 9 and are 
    // less than 10^5
    static List vec = new LinkedList();
  
    /* Preprocessing function 
    to generate all possible 
    numbers formed by 0 and 9 */
    static void generateNumbersUtil() 
    {
        // Create an empty
        // queue of Strings
        Queue q = new LinkedList();
  
        // enque the 
        // first number
        q.add("9");
  
        // This loops is like BFS of
        // a tree with 9 as root
        // 0 as left child and 9 as 
        // right child and so on
        for (int count = MAX_COUNT;
                count > 0; count--)
        {
            String s1 = q.peek();
            q.remove();
  
            // storing the Peek of
            // queue in the vector
            vec.add(s1);
  
            String s2 = s1;
  
            // Append "0" to s1
            // and enqueue it
            q.add(s1 + "0");
  
            // Append "9" to s2 and 
            // enqueue it. Note that
            // s2 contains the previous Peek
            q.add(s2 + "9");
        }
    }
  
    // function to find smallest 
    // number made up of only 
    // digits 9's and 0's, which 
    // is a multiple of n.
    static String findSmallestMultiple(int n) 
    {
        // traverse the vector 
        // to find the smallest 
        // multiple of n
        for (int i = 0; i < vec.size(); i++) // stoi() is used for 
        // String to int conversion
        {
            if (Integer.parseInt(vec.get(i)) % n == 0) 
            {
                return vec.get(i);
            }
        }
        return "";
    }
  
    // Driver Code
    public static void main(String[] args) 
    {
        generateNumbersUtil();
        int n = 7;
        System.out.println(findSmallestMultiple(n));
    }
}
  
// This code is contributed by Rajput-Ji


Python3
# Python3 program to find smallest multiple of
# a given number made of digits 0 and 9 only 
from queue import Queue
  
# Preprocessing function to generate 
# all possible numbers formed by 0 and 9 
def generateNumbersUtil():
    global vec
      
    # Create an empty queue of strings 
    q = Queue()
          
    # enque the first number 
    q.put("9") 
      
    # This loops is like BFS of a tree 
    # with 9 as root, 0 as left child
    # and 9 as right child and so on
    for count in range(MAX_COUNT, -1, -1):
        s1 = q.queue[0] 
        q.get()
          
        # storing the front of queue 
        # in the vector 
        vec.append(s1) 
          
        s2 = s1 
          
        # Append "0" to s1 and enqueue it
        s1 += "0"
        q.put(s1) 
          
        # Append "9" to s2 and enqueue it. Note 
        # that s2 contains the previous front
        s2 += "9"
        q.put(s2)
  
# function to find smallest number made 
# up of only digits 9’s and 0’s, which 
# is a multiple of n. 
def findSmallestMultiple(n):
    global vec
      
    # traverse the vector to find 
    # the smallest multiple of n
    for i in range(len(vec)):
  
        # int is used for string to
        # conversion 
        if (int(vec[i]) % n == 0): 
            return vec[i] 
  
# Driver Code 
  
# Maximum number of numbers
# made of 0 and 9 
MAX_COUNT = 10000
  
# stack to store all numbers that 
# can be formed using digits 0 and 
# 9 and are less than 10^5 
vec = [] 
generateNumbersUtil()     
n = 7    
print(findSmallestMultiple(n))
  
# This code is contributed by PranchalK


C#
// C# program to find smallest 
// multiple of a given number 
// made of digits 0 and 9 only
using System;
using System.Collections.Generic;
  
class GFG
{ 
    // Maximum number of 
    // numbers made of 0 and 9
    static int MAX_COUNT = 10000;
      
    // vector to store all numbers 
    // that can be formed using 
    // digits 0 and 9 and are 
    // less than 10^5
    static List vec = new List();
      
    /* Preprocessing function 
    to generate all possible 
    numbers formed by 0 and 9 */
    static void generateNumbersUtil()
    { 
        // Create an empty
        // queue of strings
        Queue q = new Queue();
              
        // enque the 
        // first number
        q.Enqueue("9");
          
        // This loops is like BFS of
        // a tree with 9 as root
        // 0 as left child and 9 as 
        // right child and so on
        for (int count = MAX_COUNT; 
                 count > 0; count--)
        {
            string s1 = q.Peek();
            q.Dequeue();
              
            // storing the Peek of
            // queue in the vector
            vec.Add(s1);
              
            string s2 = s1;
              
            // Append "0" to s1
            // and enqueue it
            q.Enqueue(s1 + "0");
              
            // Append "9" to s2 and 
            // enqueue it. Note that
            // s2 contains the previous Peek
            q.Enqueue(s2 + "9");
        }
    }
      
    // function to find smallest 
    // number made up of only 
    // digits 9’s and 0’s, which 
    // is a multiple of n.
    static string findSmallestMultiple(int n)
    { 
        // traverse the vector 
        // to find the smallest 
        // multiple of n
        for (int i = 0; i < vec.Count; i++)
      
            // stoi() is used for 
            // string to int conversion
            if (int.Parse(vec[i]) % n == 0) 
                return vec[i];     
        return "";
    }
      
    // Driver Code
    static void Main()
    {
        generateNumbersUtil(); 
        int n = 7; 
        Console.Write(findSmallestMultiple(n)); 
    }
}
  
// This code is contributed by 
// Manish Shaw(manishshaw1)



输出:
9009

时间复杂度:O(n)