分数 | spin on the RITZ

分数

分数の掛け算生成
暇つぶしに作ったけど、使うことはなかった・・・・


#include <cstdio>
#include <cstdlib>
#include <ctime>

int gcd(int x, int y);  //greatest common divisor(最大公約数)


class Bunsu {
public:
    int bunbo;
    int bunshi;
    Bunsu() {
        bunbo = rand()%30+1;
        bunshi = rand()%30+1;
        int div = gcd(bunbo, bunshi);
        bunbo /= div;
        bunshi /= div;
    }
    Bunsu operator*(const Bunsu& obj) {
        int div;
        Bunsu tmp;
        tmp.bunbo = bunbo * obj.bunbo;
        tmp.bunshi = bunshi * obj.bunshi;
        div = gcd(tmp.bunbo, tmp.bunshi);
        tmp.bunbo /= div;
        tmp.bunshi /= div;
        return tmp;
    }
    Bunsu operator/(const Bunsu& obj) {
        Bunsu tmp;
        tmp.bunshi = obj.bunbo;
        tmp.bunbo = obj.bunshi;
        return *this * tmp;
    }
    Bunsu& operator=(const Bunsu& obj) {
        bunbo = obj.bunbo;
        bunshi = obj.bunshi;
        return *this;
    }
};

int main()
{
    srand((unsigned int)time(NULL));

    for (int i=0;i < 5;i++) {
        Bunsu a, b, c;
        c = a * b;
        printf("%2d   %2d   %3d\n", a.bunshi, b.bunshi, c.bunshi);
        printf("-- * -- = ---\n");
        printf("%2d   %2d   %3d\n\n", a.bunbo, b.bunbo, c.bunbo);
    }
    return 0;
}


int gcd(int x, int y){
    if (x > y) {
        if ((x % y) == 0)
            return y;
        else
            return gcd(y, x % y);
    } else {
        if ((y % x) == 0)
            return x;
        else
            return gcd(x, y % x);
    }
}


実行結果
 9    4    12
-- * -- = ---
 7    3     7

 5   19    19
-- * -- = ---
28   10    56

26    4   104
-- * -- = ---
19    5    95

 7   24    84
-- * -- = ---
 2   23    23

 4    8    32
-- * -- = ---
 3   25    75