给出两个整数的方法返回最接近1000的值

use*_*390 1 c#

我得到了这个编码任务,这就是我想出的.有没有更好,更有效的方法来做到这一点?

public void GetNumberClosestToValue(int num1, int num2)
{
    int numberToCompareTo = 1000;

    try
    {
        int modNum1 = num1 % numberToCompareTo;
        int modNum2 = num2 % numberToCompareTo;

        int quotientNum1 = num1 / numberToCompareTo;
        int quotientNum2 = num2 / numberToCompareTo;

        if (num1 == num2 || Math.Abs(numberToCompareTo - num1) == Math.Abs(numberToCompareTo - num2))
            Console.WriteLine("Both numbers {0} , {1} are equally closer to {2} ", num1, num2, numberToCompareTo);
        else if (quotientNum1 == quotientNum2)
            Console.WriteLine("Number Closest to {0} is {1}", numberToCompareTo, modNum1 > modNum2 ? num1 : num2);
        else if (Math.Abs(quotientNum1) > Math.Abs(quotientNum2))
            Console.WriteLine("Number Closest to {0} is {1}", numberToCompareTo, num2);
        else
            Console.WriteLine("Number Closest to {0} is {1}", numberToCompareTo, num1);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*NET 8

怎么样:

public int GetNumberClosestTo1000(int num1, int num2)
{
    return Math.Abs(1000 - num1) > Math.Abs(1000 - num2) ? num2 : num1;
}
Run Code Online (Sandbox Code Playgroud)

这将距离设置为1000(使用Math.Abs它返回数字和减法的绝对值以获得相对距离),然后使用三元数来获取比较结果并返回正确的值.

请注意,这并不能很好地处理equals情况(它将返回num1),但是您只能有一个返回值.

使方法通用肯定是一种更好的方法:

public int GetNumberClosestToValue(int num1, int num2, int value)
{
    return Math.Abs(value - num1) > Math.Abs(value - num2) ? num2 : num1;
}
Run Code Online (Sandbox Code Playgroud)

使用int.MinValueint.MaxValue会导致溢出(感谢@ConradFrix指出这个!),这里不处理.这些边缘情况的处理将取决于所述边缘情况的功能要求.如果这是生产代码,请注意一些事项.