我得到了这个编码任务,这就是我想出的.有没有更好,更有效的方法来做到这一点?
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)
怎么样:
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.MinValue或int.MaxValue会导致溢出(感谢@ConradFrix指出这个!),这里不处理.这些边缘情况的处理将取决于所述边缘情况的功能要求.如果这是生产代码,请注意一些事项.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |