質問
私は、これは単純なことだろうと思ったが、Googleを検索すると助けていないようでした。
。二つの整数(例えば800と600)と用品私は基本的に文字列(3例4)との比を返す関数を記述しようとしています
string GetRatio(Int A, Int B) {
// Code I'm looking for
return Ratio;
}
解決
あなたは自分の GCDするます:
var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)
そしてGCDを計算するための非常に基本的な機能は、ユークリッドの互除法に使用しました。
static int GCD(int a, int b) {
return b == 0 ? Math.Abs(a) : GCD(b, a % b);
}
他のヒント
あなたは基本的に最大公約数を取得しようとしています - 二つの数字のためのGCDをし、そのことによって、それらを分割し、そのため、あなたの文字列を取得
?すなわち:800:600; = 200最大公約数従って4:3
これは、すべての整数を扱うことができるでしょう。申し訳ありませんが、コードを送信しないために、私はそれで、これは十分に単純でなければなりませんからだと思います。
public int GCD(int a, int b)
{
while (a != 0 && b != 0)
{
if (a > b)
a %= b;
else
b %= a;
}
if (a == 0)
return b;
else
return a;
}
// Using Konrad's code:
var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)
過去のようなものと共演したので、私はちょうど符号付きの値を扱うことは醜い得ることができることを追加します。元の値が異なる符号を有する場合、結果の文字列に - 「」私が前に付加し、その後、元の数字の符号付きの値を処理するための最も簡単な方法は、の絶対値のにコンラッドのアプローチを適用することであることを示唆してみましょう。
7:このアプローチを用いて、-100および-35の最大公約数は、20の比率のため、5です。オリジナルの入力はペア(-100〜35)のいずれか、または(100および-35)であった場合、あなたはまだ5のGCD、及び20の最初の結果を取得したい:7を、しかし、最終的な答えは次のようになります - 20:7(かかわらず入力のすなわち標準化された形態は、単に両方として、陰性であった-6/2及び6 / -2 = -3)
。他のコメンテーターは整数のために良い解決策を与えています。あなたが本当に浮動小数点値に対処する必要があれば、しかし、あなたは何か他のものが必要になります。一般的には、二つの実数値がかわいらしく印刷することができますきれいな比率を持っていません。何が欲しいのは、最も近い合理的な近似です。おそらく、のことの発見について移動する最良の方法は、単に商の連分数展開を計算することです。マークドミナスは、彼のブログの上のものに良い紹介します。