一週間で身につくC# の勉強中6

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            ← 整数になる

考え方のポイント

  • 答えの出し方は一つ目の数字と二つ目の数字をかけて出た数字を分母とします。
  • 一つ目の数字の分子は二つ目の数字の分母をかけた数になります。
  • ↑例の一つ目なら3/15+10/15です。
  • 答えがでたら約分します。最大値が10なので一番大きくて分母は10*10で100なので100から分子分母ともに割り切れるかforを使って調べていきます。
  • 同じ数で何度も割れる場合もあるのでwhileを使って割り切れなくなるまで繰り返します。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace prob8_6 { class Program { static void Main(string[] args) { Random r = new Random(); int bunsi1 = r.Next(1, 11); int bunbo1 = r.Next(2, 11); int bunsi2 = r.Next(1, 11); int bunbo2 = r.Next(2, 11); Console.Write("{0}/{1} + {2}/{3} =",bunsi1,bunbo1,bunsi2,bunbo2); int bunsi = bunsi1 * bunbo2 + bunsi2 * bunbo1; int bunbo = bunbo1 * bunbo2; for (int i = 100; i > 1; i--) { while (bunsi % i == 0 && bunbo % i == 0) { bunsi = bunsi / i; bunbo = bunbo / i; } } if (bunsi % bunbo ==0) { Console.WriteLine(bunsi / bunbo); } else if (bunsi > bunbo) { int taibunsuu = bunsi / bunbo; bunsi = bunsi - taibunsuu * bunbo; Console.WriteLine("{0}.{1}/{2}", taibunsuu , bunsi, bunbo); } else { Console.WriteLine("{0}/{1}", bunsi, bunbo); } } } }