入力値、3/4と1/2を入力したときに、
引き算の箇所が答えにならないのですが、どうしたらよいでしょうか。
数値によっては正しい答えが出てくるのですが・・・
#include <iostream>
using namespace std;
class Frac {
protected:
int bunshi, bunbo;
int gcd(int a, int b) {
int p;
if (a < b)p = b;
else p = a;
while (1) {
if (a%p == 0 && b%p == 0) {
return p;
cout << p << endl;
}
p--;
}
return 0;
}
public:
Frac(int a, int b) {
bunshi = a;
bunbo = b;
gcd(bunbo, bunshi);
int yaku;
yaku = gcd(bunshi, bunbo);
if (yaku == 0) {
return;
}
else {
bunshi = bunshi / yaku;
bunbo = bunbo / yaku;
}
}
void print() {
if (bunbo == 1) {
cout << bunshi << endl;
}
else if (bunshi > bunbo) {
cout << bunshi / bunbo << " + (" << bunshi % bunbo << "/" << bunbo << ")" << endl;
}
else {
cout << "(" << bunshi << "/" << bunbo << ")" << endl;
}
}
Frac operator*(Frac b) {
int shi = bunshi* b.bunshi;
int bo = bunbo* b.bunbo;
return Frac(shi, bo);
}
Frac operator/(Frac b) {
int shi = bunshi * b.bunbo;
int bo = bunbo * b.bunshi;
return Frac(shi, bo);
}
Frac operator+(Frac b) {
int aa = gcd(bunbo, b.bunbo);
int bb = (bunbo*b.bunbo) / aa;
int c = 1;
int d = bunbo;
while (bb != bunbo) {
bunbo += d;
c++;
}
bunshi *= c;
c = 1;
d = b.bunbo;
while (bb != b.bunbo) {
b.bunbo += d;
c++;
}
b.bunshi *= c;
return Frac(bunshi + b.bunshi, bunbo);
}
Frac operator-(Frac b) {
int shi = bunshi - b.bunshi;
return Frac(shi, b.bunbo);
}
};
int main() {
int h, m;
cin >> h >> m;
Frac a1 = Frac(h, m);
a1.print();
cin >> h >> m;
Frac a2 = Frac(h, m);
a2.print();
Frac b = a1*a2;
b.print();
b = a1 / a2;
b.print();
b = a1 + a2;
b.print();
b = a1 - a2;
b.print();
return 0;
}