A7984.分数求和
2025-08-20 21:02:17
发布于:江苏
0阅读
0回复
0点赞
我永远支持C++的面向对象特性……所以不要看我的题解因为它烂得跟*一样
#include <iostream>
using namespace std;
//分数
struct frac{
public:
//分子,分母
int num, div;
//约分
void ease() {
int g = gcd(num, div);
num /= g, div /= g;
}
//通分
void common(frac &b) {
int l = lcm(div, b.div);
num *= l/div;
b.num *= l/b.div;
div = b.div = l;
}
//分数加法
frac operator+(frac &b){
common(b);
frac res;
res.num = num+b.num;
res.div = div;
ease();b.ease();
return res;
}
//输入格式
friend istream &operator>>(istream &i, frac &a) {
char c;
i >> a.num >> c >> a.div;
return i;
}
//输出格式
friend ostream &operator<<(ostream &o, frac &a) {
a.ease();
if (a.div == 1) o << a.num;
else o << a.num << '/' << a.div;
return o;
}
private:
//最大公因数
int gcd(int a, int b) {
while (int t=a%b) {
a = b;
b = t;
}
return b;
}
//最小公倍数
int lcm(int a, int b) {
int res = a*b;
while (int t=a%b) {
a = b;
b = t;
} res/=b;
return res;
}
};
int n;
int main() {
frac res = {0, 1};
cin >> n;
while (n--) {
frac a;
cin >> a;
res = res+a;
}
cout << res;
return 0;
}
这里空空如也
有帮助,赞一个