📌  相关文章
📜  查找最接近n且可被m整除的数字

📅  最后修改于: 2021-04-23 07:32:50             🧑  作者: Mango

给定两个整数nm 。问题是找到最接近n且可被m整除的数字。如果该数字不止一个,则输出绝对值最大的数字。如果n可被m整除,则仅输出n 。需要O(1)的时间复杂度。
约束: m!= 0
例子:

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.

资料来源: Microsoft面试经验|设置125。

我们发现n / m的值。将此值设为q。然后我们找到两种可能性中最接近的一种。一个是q * m另一个是(m *(q + 1))或(m *(q – 1)),这取决于给定的两个数字之一是否为负。
算法:

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


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


PHP
 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
?>


Javascript


输出:

12
-18
0
21