分數等式判斷(結構體版)
1.0s 256M這題是分數等式判斷的結構體版:輸入輸出與原題完全相同。請把每個分數包成一個結構體 Fraction(建議成員:分子 p、分母 q;建構子自動約分並讓分母保持為正,再多載 + 與 ==),用第十四單元的寫法重寫一次——原題你當時是自己通分、交叉相乘的;這次把這些規則收進結構體,主程式應該只剩一行。
下面這支主程式已經寫好了,把你的 Fraction(含建構子、operator +、operator ==)貼進空位就能通過這題:
#include <iostream>
#include <numeric>
using namespace std;
// ===== 把你的 struct Fraction 貼在這裡 =====
// ==========================================
int main() {
long long a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
cout << (Fraction(a, b) + Fraction(c, d) == Fraction(e, f)) << '\n';
return 0;
}
給定六個整數 \(a,b,c,d,e,f\),請判斷:
\[\frac{a}{b}+\frac{c}{d}\]是否與:
\[\frac{e}{f}\]完全相等。
浮點數只能儲存近似值。即使把 double 換成精度更高的
long double,直接使用 == 仍然可能失敗。例如下面的程式就不是正確
做法:
#include <iostream>
using namespace std;
int main() {
long long a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
cout << ((long double)a / b + (long double)c / d
== (long double)e / f) << '\n';
}
請使用整數運算精確判斷。測資限制保證在正確的交叉相乘過程中,所有
中間結果都能存進 long long;用結構體「先約分、再通分相加」的中間結果也一樣存得進 long long。
輸入格式
輸入一行,包含六個整數 \(a,b,c,d,e,f\)。
限制
- \(-46000 \le a,b,c,d \le 46000\)
- \(-2116000000 \le e,f \le 2116000000\)
- \(b\ne 0\)
- \(d\ne 0\)
- \(f\ne 0\)
輸出格式
若 \(\frac{a}{b}+\frac{c}{d}\) 與 \(\frac{e}{f}\) 完全相等,輸出 1;
否則輸出 0。
範例輸入 1
1 2 1 3 5 6
範例輸出 1
1
範例解釋 1
\(\frac{1}{2}+\frac{1}{3}=\frac{5}{6}\)。但是在評測環境中,上方錯誤
程式使用 long double 直接比較時會得到不相等。
範例輸入 2
1 2 1 3 4 5
範例輸出 2
0
範例輸入 3
1 3 1 5 8 15
範例輸出 3
1