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.

Source: Microsoft Interview experience | Set 125.

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to find the number closest to n
// and divisible by m
#include <bits/stdc++.h>
  
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;

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation to find 
// the number closest to n and
// divisible by m 
  
// function to find the number 
// closest to n and divisible by m 
function closestNumber($n, $m
    // find the quotient 
    $q = (int) ($n / $m); 
      
    // 1st possible closest number 
    $n1 = $m * $q
      
    // 2nd possible closest number 
    $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 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
?>

chevron_right



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.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : AbhishekChomal, jit_t