私はこのコーディングの割り当てを与えられました、そしてこれが私が思いついたものです。これを行うためのより良い、より効率的な方法はありますか?
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);
}
}
どうですか:
public int GetNumberClosestTo1000(int num1, int num2)
{
return Math.Abs(1000 - num1) > Math.Abs(1000 - num2) ? num2 : num1;
}
これにより、距離が1000になり(Math.Abs
これを使用して数値の絶対値と減算を返し、相対距離を取得します)、3進数を使用して比較の結果を取得し、正しい値を返します。
これはequalsの場合をそれほどうまく処理しないことに注意してください(num1を返します)が、返す値は1つだけです。
メソッドをジェネリックにすることは確かにより良いアプローチでしょう:
public int GetNumberClosestToValue(int num1, int num2, int value)
{
return Math.Abs(value - num1) > Math.Abs(value - num2) ? num2 : num1;
}
int.MinValue
またはint.MaxValue
を使用するとオーバーフローが発生し(これを指摘してくれた@ConradFrixに感謝します!)、ここでは処理されません。これらのエッジケースの処理は、前述のエッジケースの機能要件によって異なります。これが製品コードであるかどうかを知っておくべきことです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加