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

prob8-7

2つの分数同士の足し算をし、その結果を分数で表示するプログラムを作りなさい。。ただし、計算前の二つの数値は、約分されていなくても良いものとする。また、表示方法は例に倣いなさい。 (1)2つの分数の分子、分母共に1から10までの乱数とする。 (2)分子が分母より大きい場合は、帯分数として表す。 (3)分子が分母で割り切れる場合は、整数として表す。

例 1.1/3 + 2.1/2 = 3.5/6 2/3 + 3/8= 1.1/24

1 + 1/3= 1.1/3 2/3 + 9/12=1.5/12

考え方のポイント

特にポイントはありません。prob8-6で分数の答えを出した後に形式を整えましたがこの問題は式を作る時にも同じように形式を整えます。

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

namespace prob8_7
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            int bunsi1 = r.Next(1, 11);
            int bunbo1 = r.Next(1, 11);
            int bunsi2 = r.Next(1, 11);
            int bunbo2 = r.Next(1, 11);
            int taibunsuu = 0;
            if (bunsi1 % bunbo1 == 0)
            {
                Console.Write("{0} + ", bunsi1/ bunbo1);
            }
            else if (bunsi1 > bunbo1)
            {
                taibunsuu = bunsi1 / bunbo1;
                int bunsi0 = bunsi1 - taibunsuu * bunbo1;
                Console.Write("{0}.{1}/{2} + ", taibunsuu, bunsi0, bunbo1);
                taibunsuu = 0;
            }
            else
            {
                Console.Write("{0}/{1} + ", bunsi1, bunbo1);
            }
            if (bunsi2 % bunbo2 == 0)
            {
                Console.Write("{0} = ", bunsi2 / bunbo2);
            }
            else if (bunsi2 > bunbo2)
            {
                taibunsuu = bunsi2 / bunbo2;
                int bunsi0 = bunsi2 - taibunsuu * bunbo2;
                Console.Write("{0}.{1}/{2} = ", taibunsuu, bunsi0, bunbo2);
                taibunsuu = 0;
            }
            else
            {
                Console.Write("{0}/{1} = ", 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)
            {
                taibunsuu = bunsi / bunbo;
                bunsi = bunsi - taibunsuu * bunbo;
                Console.WriteLine("{0}.{1}/{2}", taibunsuu, bunsi, bunbo);
            }
            else
            {
                Console.WriteLine("{0}/{1}", bunsi, bunbo);
            }
        }
    }
}

かなり長いコードになってしまいました。もっと簡潔なコードがあるのかな?