2つの小数のどちらが他の小数より大きいか把握する必要があります。分数構造は、分子と分母の値をlong
に保持します。長い値を掛ける正しい方法
try
{
checked
{
long a = fraction1.Numerator * fraction2.Denominator;
long b = fraction2.Numerator * fraction1.Denominator;
return a.CompareTo(b);
}
}
catch
{
throw new Exception("CompareTo failed");
}
これはケースの広い範囲で正常に動作するが、例外がスローされた場合の量を低減することができるa
とb
ための別のデータ・タイプを選択することによって、次のよう
ナイーブなアプローチであります。
いいえ(いいえ、余分なライブラリを参照しないでください)のデータタイプはどれですか? decimal
? BigInteger
?
'decimal'または' BigInteger'は動作しますが、唯一の 'decimal'が付属していますので、System.Numericsからの参照のBigIntegerが、この場合には私のために許容可能ですもちろん、余分な参照なしでフレームワークにあります。 –
'decimal 'の範囲内にとどまるためには、私が"正方形 "でできる最大の数字は281,474976,710656で、' long.MaxValue'よりかなり小さいです。= 9223372,036854,775807 – David
ああ、 。申し訳ありません。 BigIntegerに変更するか、別のアプローチに変更します(例:共通の要素を見つける。 –