# Smallest number greater than or equal to X whose sum of digits is divisible by Y

• Last Updated : 18 Jul, 2022

Given two integers X and Y, the task is to find the smallest number greater than or equal to X whose sum of digits is divisible by Y
Note: 1 <= X <= 1000, 1 <= Y <= 50.
Examples:

Input: X = 10, Y = 5
Output: 14
Explanation:
14 is the smallest number greater than 10 whose sum of digits (1+4 = 5) is divisible by 5.
Input: X = 5923, Y = 13
Output: 5939

Approach: The idea for this problem is to run a loop from X and check for each integer if its sum of digits is divisible by Y or not. Return the first number whose sum of digits is divisible by Y. Given the constraints of X and Y, the answer always exist.
Below is the implementation of the above approach:

## C++

 `// C++ program to find the smallest number greater than or``// equal to X and divisible by Y` `#include ``using` `namespace` `std;` `#define MAXN 10000000` `// Function that returns the sum of digits of a number``int` `sumOfDigits(``int` `n)``{``    ``// Initialize variable to store the sum``    ``int` `sum = 0;``    ``while` `(n > 0) {``        ``// Add the last digit of the number``        ``sum += n % 10;``        ``// Remove the last digit from the number``        ``n /= 10;``    ``}``    ``return` `sum;``}` `// Function that returns the smallest number greater than or``// equal to X and divisible by Y``int` `smallestNum(``int` `X, ``int` `Y)``{``    ``// Initialize result variable``    ``int` `res = -1;``    ``// Loop through numbers greater than  equal to X``    ``for` `(``int` `i = X; i < MAXN; i++) {``        ``// Calculate sum of digits``        ``int` `sum_of_digit = sumOfDigits(i);``        ``// Check if sum of digits is divisible by Y``        ``if` `(sum_of_digit % Y == 0) {``            ``res = i;``            ``break``;``        ``}``    ``}``    ``return` `res;``}` `// Driver code``int` `main()``{``    ``int` `X = 5923, Y = 13;``    ``cout << smallestNum(X, Y);``    ``return` `0;``}` `// This code is contributed by Sania Kumari Gupta`

## C

 `// C program to find the smallest number greater than or``// equal to X and divisible by Y``#include ` `#define MAXN 10000000` `// Function that returns the sum of digits of a number``int` `sumOfDigits(``int` `n)``{``    ``// Initialize variable to store the sum``    ``int` `sum = 0;``    ``while` `(n > 0) {``        ``// Add the last digit of the number``        ``sum += n % 10;``        ``// Remove the last digit from the number``        ``n /= 10;``    ``}``    ``return` `sum;``}` `// Function that returns the smallest number greater than or``// equal to X and divisible by Y``int` `smallestNum(``int` `X, ``int` `Y)``{``    ``// Initialize result variable``    ``int` `res = -1;``    ``// Loop through numbers greater than  equal to X``    ``for` `(``int` `i = X; i < MAXN; i++) {``        ``// Calculate sum of digits``        ``int` `sum_of_digit = sumOfDigits(i);``        ``// Check if sum of digits is divisible by Y``        ``if` `(sum_of_digit % Y == 0) {``            ``res = i;``            ``break``;``        ``}``    ``}``    ``return` `res;``}` `// Driver code``int` `main()``{``    ``int` `X = 5923, Y = 13;``    ``printf``(``"%d"``, smallestNum(X, Y));``    ``return` `0;``}` `// This code is contributed by Sania Kumari Gupta`

## Java

 `// Java program to find the smallest number``// greater than or equal to X and divisible by Y` `class` `GFG{` `static` `final` `int` `MAXN = ``10000000``;` `// Function that returns the sum``// of digits of a number``static` `int` `sumOfDigits(``int` `n)``{``    ` `    ``// Initialize variable to``    ``// store the sum``    ``int` `sum = ``0``;``    ``while` `(n > ``0``)``    ``{` `         ``// Add the last digit``         ``// of the number``         ``sum += n % ``10``;` `         ``// Remove the last digit``         ``// from the number``         ``n /= ``10``;``    ``}``    ``return` `sum;``}` `// Function that returns the smallest number``// greater than or equal to X and divisible by Y``static` `int` `smallestNum(``int` `X, ``int` `Y)``{``    ` `    ``// Initialize result variable``    ``int` `res = -``1``;` `    ``// Loop through numbers greater``    ``// than equal to X``    ``for` `(``int` `i = X; i < MAXN; i++)``    ``{` `        ``// Calculate sum of digits``        ``int` `sum_of_digit = sumOfDigits(i);` `        ``// Check if sum of digits``        ``// is divisible by Y``        ``if` `(sum_of_digit % Y == ``0``)``        ``{``            ``res = i;``            ``break``;``        ``}``    ``}``    ``return` `res;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `X = ``5923``, Y = ``13``;``    ``System.out.print(smallestNum(X, Y));``}``}` `// This code is contributed by Rohit_ranjan`

## Python3

 `# Python3 program to find the smallest number``# greater than or equal to X and divisible by Y` `MAXN ``=` `10000000` `# Function that returns the ``# sum of digits of a number``def` `sumOfDigits(n):``    ` `    ``# Initialize variable ``    ``# to store the sum``    ``sum` `=` `0``    ` `    ``while``(n > ``0``):``        ` `        ``# Add the last digit``        ``# of the number``        ``sum` `+``=` `n ``%` `10``        ` `        ``# Remove the last digit``        ``# from the number``        ``n ``/``/``=` `10``        ` `    ``return` `sum` `# Function that returns the smallest number``# greater than or equal to X and divisible by Y``def` `smallestNum(X, Y):``    ` `    ``# Initialize result variable``    ``res ``=` `-``1``;` `    ``# Loop through numbers greater``    ``# than equal to X``    ``for` `i ``in` `range``(X, MAXN):``        ` `        ``# Calculate sum of digits``        ``sum_of_digit ``=` `sumOfDigits(i)``        ` `        ``# Check if sum of digits``        ``# is divisible by Y``        ``if` `sum_of_digit ``%` `Y ``=``=` `0``:``            ``res ``=` `i``            ``break``    ` `    ``return` `res    ``            ` `# Driver code``if` `__name__``=``=``'__main__'``:``    ` `    ``(X, Y) ``=` `(``5923``, ``13``)``     ` `    ``print``(smallestNum(X, Y))` `# This code is contributed by rutvik_56`

## C#

 `// C# program to find the smallest number``// greater than or equal to X and divisible by Y``using` `System;` `class` `GFG{` `static` `readonly` `int` `MAXN = 10000000;` `// Function that returns the sum``// of digits of a number``static` `int` `sumOfDigits(``int` `n)``{``    ` `    ``// Initialize variable to``    ``// store the sum``    ``int` `sum = 0;``    ``while``(n > 0)``    ``{``        ` `         ``// Add the last digit``         ``// of the number``         ``sum += n % 10;` `         ``// Remove the last digit``         ``// from the number``         ``n /= 10;``    ``}``    ``return` `sum;``}` `// Function that returns the smallest number``// greater than or equal to X and divisible by Y``static` `int` `smallestNum(``int` `X, ``int` `Y)``{``    ` `    ``// Initialize result variable``    ``int` `res = -1;` `    ``// Loop through numbers greater``    ``// than equal to X``    ``for``(``int` `i = X; i < MAXN; i++)``    ``{``    ` `        ``// Calculate sum of digits``        ``int` `sum_of_digit = sumOfDigits(i);` `        ``// Check if sum of digits``        ``// is divisible by Y``        ``if``(sum_of_digit % Y == 0)``        ``{``           ``res = i;``           ``break``;``        ``}``    ``}``    ``return` `res;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `X = 5923, Y = 13;``    ``Console.Write(smallestNum(X, Y));``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``

Output:

`5939`

Time Complexity: O(MAXN)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up