Given two integers **S** and **D**, the task is to find the number having **D** number of digits and the sum of its digits as **S** such that the difference between the maximum and the minimum digit in the number is as minimum as possible. If multiple such numbers are possible, print the smallest number.

**Examples:**

Input:S = 25, D = 4Output:6667

The difference between maximum digit 7 and minimum digit 6 is 1.

Input:S = 27, D = 3Output:999

**Approach:**

- Finding smallest number for given number of digits and sum is already discussed in this article.
- In this article, the idea is to minimize the difference between the maximum and minimum digit in the required number. Therefore, the sum s should be evenly distributed among d digits.
- If the sum is evenly distributed then the difference can be at most 1. The difference is zero when sum s is divisible by d. In that case, each of the digits has the same value equal to s/d.
- The difference is one when sum s is not divisible by d. In that case, after each digit is assigned value s/d, s%d sum value is still left to be distributed.
- As the smallest number is required, this remaining value is evenly distributed among last s%d digits of the number, i.e., last s%d digits in the number are incremented by one.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// Function to find the number having` `// sum of digits as s and d number of` `// digits such that the difference between` `// the maximum and the minimum digit` `// the minimum possible` `string findNumber(` `int` `s, ` `int` `d)` `{` ` ` `// To store the final number` ` ` `string num = ` `""` `;` ` ` ` ` `// To store the value that is evenly` ` ` `// distributed among all the digits` ` ` `int` `val = s / d;` ` ` ` ` `// To store the remaining sum that still` ` ` `// remains to be distributed among d digits` ` ` `int` `rem = s % d;` ` ` ` ` `int` `i;` ` ` ` ` `// rem stores the value that still remains` ` ` `// to be distributed` ` ` `// To keep the difference of digits minimum` ` ` `// last rem digits are incremented by 1` ` ` `for` `(i = 1; i <= d - rem; i++) {` ` ` `num = num + to_string(val);` ` ` `}` ` ` ` ` `// In the last rem digits one is added to` ` ` `// the value obtained by equal distribution` ` ` `if` `(rem) {` ` ` `val++;` ` ` `for` `(i = d - rem + 1; i <= d; i++) {` ` ` `num = num + to_string(val);` ` ` `}` ` ` `}` ` ` ` ` `return` `num;` `}` ` ` `// Driver function` `int` `main()` `{` ` ` `int` `s = 25, d = 4;` ` ` ` ` `cout << findNumber(s, d);` ` ` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `import` `java.util.*;` ` ` `class` `GFG` `{` ` ` `// Function to find the number having` `// sum of digits as s and d number of` `// digits such that the difference between` `// the maximum and the minimum digit` `// the minimum possible` `static` `String findNumber(` `int` `s, ` `int` `d)` `{` ` ` `// To store the final number` ` ` `String num = ` `""` `;` ` ` ` ` `// To store the value that is evenly` ` ` `// distributed among all the digits` ` ` `int` `val = s / d;` ` ` ` ` `// To store the remaining sum that still` ` ` `// remains to be distributed among d digits` ` ` `int` `rem = s % d;` ` ` ` ` `int` `i;` ` ` ` ` `// rem stores the value that still remains` ` ` `// to be distributed` ` ` `// To keep the difference of digits minimum` ` ` `// last rem digits are incremented by 1` ` ` `for` `(i = ` `1` `; i <= d - rem; i++)` ` ` `{` ` ` `num = num + String.valueOf(val);` ` ` `}` ` ` ` ` `// In the last rem digits one is added to` ` ` `// the value obtained by equal distribution` ` ` `if` `(rem > ` `0` `) ` ` ` `{` ` ` `val++;` ` ` `for` `(i = d - rem + ` `1` `; i <= d; i++)` ` ` `{` ` ` `num = num + String.valueOf(val);` ` ` `}` ` ` `}` ` ` `return` `num;` `}` ` ` `// Driver function` `public` `static` `void` `main(String[] args)` `{` ` ` `int` `s = ` `25` `, d = ` `4` `;` ` ` ` ` `System.out.print(findNumber(s, d));` `}` `}` ` ` `// This code is contributed by 29AjayKumar` |

## Python3

`# Python3 implementation of the approach ` ` ` `# Function to find the number having ` `# sum of digits as s and d number of ` `# digits such that the difference between ` `# the maximum and the minimum digit ` `# the minimum possible ` `def` `findNumber(s, d) :` ` ` ` ` `# To store the final number ` ` ` `num ` `=` `""; ` ` ` ` ` `# To store the value that is evenly ` ` ` `# distributed among all the digits ` ` ` `val ` `=` `s ` `/` `/` `d; ` ` ` ` ` `# To store the remaining sum that still ` ` ` `# remains to be distributed among d digits ` ` ` `rem ` `=` `s ` `%` `d; ` ` ` ` ` `# rem stores the value that still remains ` ` ` `# to be distributed ` ` ` `# To keep the difference of digits minimum ` ` ` `# last rem digits are incremented by 1 ` ` ` `for` `i ` `in` `range` `(` `1` `, d ` `-` `rem ` `+` `1` `) :` ` ` `num ` `=` `num ` `+` `str` `(val); ` ` ` ` ` `# In the last rem digits one is added to ` ` ` `# the value obtained by equal distribution ` ` ` `if` `(rem) :` ` ` `val ` `+` `=` `1` `; ` ` ` `for` `i ` `in` `range` `(d ` `-` `rem ` `+` `1` `, d ` `+` `1` `) :` ` ` `num ` `=` `num ` `+` `str` `(val); ` ` ` ` ` `return` `num; ` ` ` `# Driver function ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `s ` `=` `25` `; d ` `=` `4` `; ` ` ` ` ` `print` `(findNumber(s, d)); ` ` ` `# This code is contributed by AnkitRai01` |

## C#

`// C# implementation of the approach` `using` `System;` ` ` `class` `GFG ` `{` ` ` ` ` `// Function to find the number having` ` ` `// sum of digits as s and d number of` ` ` `// digits such that the difference between` ` ` `// the maximum and the minimum digit` ` ` `// the minimum possible` ` ` `static` `String findNumber(` `int` `s, ` `int` `d)` ` ` `{` ` ` `// To store the readonly number` ` ` `String num = ` `""` `;` ` ` ` ` `// To store the value that is evenly` ` ` `// distributed among all the digits` ` ` `int` `val = s / d;` ` ` ` ` `// To store the remaining sum that still` ` ` `// remains to be distributed among d digits` ` ` `int` `rem = s % d;` ` ` ` ` `int` `i;` ` ` ` ` `// rem stores the value that still remains` ` ` `// to be distributed` ` ` `// To keep the difference of digits minimum` ` ` `// last rem digits are incremented by 1` ` ` `for` `(i = 1; i <= d - rem; i++) ` ` ` `{` ` ` `num = num + String.Join(` `""` `, val);` ` ` `}` ` ` ` ` `// In the last rem digits one is added to` ` ` `// the value obtained by equal distribution` ` ` `if` `(rem > 0)` ` ` `{` ` ` `val++;` ` ` `for` `(i = d - rem + 1; i <= d; i++)` ` ` `{` ` ` `num = num + String.Join(` `""` `, val);` ` ` `}` ` ` `}` ` ` `return` `num;` ` ` `}` ` ` ` ` `// Driver function` ` ` `public` `static` `void` `Main(String[] args)` ` ` `{` ` ` `int` `s = 25, d = 4;` ` ` ` ` `Console.Write(findNumber(s, d));` ` ` `}` `}` ` ` `// This code is contributed by 29AjayKumar` |

**Output:**

6667

**Time Complexity:** O(d)**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend live classes with industry experts, please refer **Geeks Classes Live** and **Geeks Classes Live USA**