初めまして。Unity、C#を勉強中の初心者です。
こちらのサイトのチャレンジ問題prob8-6.について質問させていただきたいと思います。
2つの分数同士の足し算をし、その結果を分数で表示するプログラムを作りなさい。このとき、分子、分母共に最大値が10で、最小値は分母が2、分子が1とする。それらの数値をランダムに発生させ、以下のように結果を表示させなさい。ただし、計算結果は、分子と分母がきちんと約分されていることとする。また、分子が分母の数で割り切れる場合は、整数として表示するものとする。
例
1/5 + 2/3 = 13/15 ← 通常のケース
2/3 + 3/8= 1.1/24 ← 帯分数になるケース
1/6 + 1/3= 1/2 ← 約分されるケース
1/2 + 1/2 = 1 ← 整数になるケース
自分なりにコードを作成し(後述)デバッグを行ってみたところ、上記設問で求められている計算結果が問題なく表示できているようなのでホッと一安心…なのですが、さらに見やすくわかりやすいコードにするにはどうすればいいのかわからず悩んでおります。
改良点・改善点等ございましたら教えていただければ幸いです。
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace Problem8_6 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Random rand = new Random(); 14 int denominator1 = rand.Next(2, 11); // 分母1 15 int numerator1 = rand.Next(1, 11); // 分子1 16 int denominator2 = rand.Next(2, 11); // 分母2 17 int numerator2 = rand.Next(1, 11); // 分子2 18 int n = 0; // 整数部分をnとする 19 Console.Write("{0}/{1} + {2}/{3} = ", numerator1, denominator1, numerator2, denominator2); 20 21 int resultDenominator = denominator1 * denominator2; 22 int resultNumerator = numerator1 * denominator2 + numerator2 * denominator1; 23 24 int m = Gcd(resultDenominator, resultNumerator); 25 resultDenominator /= m; 26 resultNumerator /= m; 27 28 while (resultNumerator >= resultDenominator) 29 { 30 resultNumerator -= resultDenominator; 31 n++; 32 } 33 if (resultNumerator % resultDenominator == 0 && n != 0) 34 { 35 Console.WriteLine("{0}", n); 36 } 37 else if (n != 0) 38 { 39 Console.WriteLine("{0}.{1}/{2}", n, resultNumerator, resultDenominator); 40 } 41 else 42 { 43 Console.WriteLine("{0}/{1}", resultNumerator, resultDenominator); 44 } 45 } 46 static int Gcd(int a, int b) // 最大公約数を求める 47 { 48 int x; 49 while ((x = a % b) != 0) 50 { 51 a = b; 52 b = x; 53 } 54 return b; 55 } 56 } 57}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/23 01:05