# Find the number closest to n and divisible by m

Given two integers n and m. The problem is to find the number closest to n and divisible by m. If there are more than one such number, then output the one having maximum absolute value. If n is completely divisible by m, then output n only. Time complexity of O(1) is required.

Constraints: m != 0

Examples:

```Input : n = 13, m = 4
Output : 12

Input : n = -15, m = 6
Output : -18
Both -12 and -18 are closest to -15, but
-18 has the maximum absolute value.
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

We find value of n/m. Let this value be q. Then we find closest of two possibilities. One is q * m other is (m * (q + 1)) or (m * (q – 1)) depending on whether one of the given two numbers is negative or not.

Algorithm:

```closestNumber(n, m)
Declare q, n1, n2
q = n / m
n1 = m * q

if (n * m) > 0
n2 = m * (q + 1)
else
n2 = m * (q - 1)

if abs(n-n1) < abs(n-n2)
return n1
return n2
```
 `// C++ implementation to find the number closest to n ` `// and divisible by m ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// function to find the number closest to n ` `// and divisible by m ` `int` `closestNumber(``int` `n, ``int` `m) ` `{ ` `    ``// find the quotient ` `    ``int` `q = n / m; ` `     `  `    ``// 1st possible closest number ` `    ``int` `n1 = m * q; ` `     `  `    ``// 2nd possible closest number ` `    ``int` `n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1)); ` `     `  `    ``// if true, then n1 is the required closest number ` `    ``if` `(``abs``(n - n1) < ``abs``(n - n2)) ` `        ``return` `n1; ` `     `  `    ``// else n2 is the required closest number     ` `    ``return` `n2;     ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``int` `n = 13, m = 4; ` `    ``cout << closestNumber(n, m) << endl; ` `     `  `    ``n = -15; m = 6; ` `    ``cout << closestNumber(n, m) << endl; ` `     `  `    ``n = 0; m = 8; ` `    ``cout << closestNumber(n, m) << endl; ` `     `  `    ``n = 18; m = -7; ` `    ``cout << closestNumber(n, m) << endl; ` `     `  `    ``return` `0; ` `}  `

 `// Java implementation to find the number closest to n ` `// and divisible by m ` `public` `class` `close_to_n_divisible_m { ` `     `  `    ``// function to find the number closest to n ` `    ``// and divisible by m ` `    ``static` `int` `closestNumber(``int` `n, ``int` `m) ` `    ``{ ` `        ``// find the quotient ` `        ``int` `q = n / m; ` `          `  `        ``// 1st possible closest number ` `        ``int` `n1 = m * q; ` `          `  `        ``// 2nd possible closest number ` `        ``int` `n2 = (n * m) > ``0` `? (m * (q + ``1``)) : (m * (q - ``1``)); ` `          `  `        ``// if true, then n1 is the required closest number ` `        ``if` `(Math.abs(n - n1) < Math.abs(n - n2)) ` `            ``return` `n1; ` `          `  `        ``// else n2 is the required closest number     ` `        ``return` `n2;     ` `    ``} ` `      `  `    ``// Driver program to test above ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `n = ``13``, m = ``4``; ` `        ``System.out.println(closestNumber(n, m)); ` `          `  `        ``n = -``15``; m = ``6``; ` `        ``System.out.println(closestNumber(n, m)); ` `          `  `        ``n = ``0``; m = ``8``; ` `        ``System.out.println(closestNumber(n, m)); ` `          `  `        ``n = ``18``; m = -``7``; ` `        ``System.out.println(closestNumber(n, m)); ` `    ``}  ` `} ` `// This code is contributed by Sumit Ghosh `

 `# Python 3 implementation to find ` `# the number closest to n ` ` `  `# Function to find the number closest  ` `# to n and divisible by m ` `def` `closestNumber(n, m) : ` `    ``# Find the quotient ` `    ``q ``=` `int``(n ``/` `m) ` `     `  `    ``# 1st possible closest number ` `    ``n1 ``=` `m ``*` `q ` `     `  `    ``# 2nd possible closest number ` `    ``if``((n ``*` `m) > ``0``) : ` `        ``n2 ``=` `(m ``*` `(q ``+` `1``))  ` `    ``else` `: ` `        ``n2 ``=` `(m ``*` `(q ``-` `1``)) ` `     `  `    ``# if true, then n1 is the required closest number ` `    ``if` `(``abs``(n ``-` `n1) < ``abs``(n ``-` `n2)) : ` `        ``return` `n1 ` `     `  `    ``# else n2 is the required closest number  ` `    ``return` `n2 ` `     `  `     `  `# Driver program to test above ` `n ``=` `13``; m ``=` `4` `print``(closestNumber(n, m)) ` ` `  `n ``=` `-``15``; m ``=` `6` `print``(closestNumber(n, m)) ` ` `  `n ``=` `0``; m ``=` `8` `print``(closestNumber(n, m)) ` ` `  `n ``=` `18``; m ``=` `-``7` `print``(closestNumber(n, m)) ` ` `  `# This code is contributed by Nikita tiwari. `

 `// C# implementation to find the ` `// number closest to n and divisible by m ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``// function to find the number closest to n ` `    ``// and divisible by m ` `    ``static` `int` `closestNumber(``int` `n, ``int` `m) ` `    ``{ ` `        ``// find the quotient ` `        ``int` `q = n / m; ` ` `  `        ``// 1st possible closest number ` `        ``int` `n1 = m * q; ` ` `  `        ``// 2nd possible closest number ` `        ``int` `n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1)); ` ` `  `        ``// if true, then n1 is the required closest number ` `        ``if` `(Math.Abs(n - n1) < Math.Abs(n - n2)) ` `            ``return` `n1; ` ` `  `        ``// else n2 is the required closest number ` `        ``return` `n2; ` `    ``} ` ` `  `    ``// Driver program to test above ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 13, m = 4; ` `        ``Console.WriteLine(closestNumber(n, m)); ` ` `  `        ``n = -15; ` `        ``m = 6; ` `        ``Console.WriteLine(closestNumber(n, m)); ` ` `  `        ``n = 0; ` `        ``m = 8; ` `        ``Console.WriteLine(closestNumber(n, m)); ` ` `  `        ``n = 18; ` `        ``m = -7; ` `        ``Console.WriteLine(closestNumber(n, m)); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007 `

 ` 0 ?  ` `        ``(``\$m` `* (``\$q` `+ 1)) : (``\$m` `* (``\$q` `- 1));  ` `     `  `    ``// if true, then n1 is the  ` `    ``// required closest number  ` `    ``if` `(``abs``(``\$n` `- ``\$n1``) < ``abs``(``\$n` `- ``\$n2``))  ` `        ``return` `\$n1``;  ` `     `  `    ``// else n2 is the required  ` `    ``// closest number  ` `    ``return` `\$n2``;  ` `}  ` ` `  `// Driver Code ` `\$n` `= 13; ` `\$m` `= 4;  ` `echo` `closestNumber(``\$n``, ``\$m``), ``"\n"``;  ` ` `  `\$n` `= -15; ` `\$m` `= 6;  ` `echo` `closestNumber(``\$n``, ``\$m``), ``"\n"``;  ` ` `  `\$n` `= 0;  ` `\$m` `= 8;  ` `    ``echo` `closestNumber(``\$n``, ``\$m``), ``"\n"``;  ` ` `  `\$n` `= 18; ` `\$m` `= -7;  ` `    ``echo` `closestNumber(``\$n``, ``\$m``), ``"\n"``;  ` ` `  `// This code is contributed by jit_t ` `?> `

Output:
```12
-18
0
21
```

Time Complexity: O(1)

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.