题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880
这题注意一下各个函数的,处理,尤其是约分那部分,涉及的函数很多。
- 结构体
- 最大公约数gcd
- 约分函数
- 加法函数
- 显示函数
代码
typedef long long ll;
#include<algorithm>#include<iostream>#include<vector>using namespace std;struct Fraction{long long up, down;};long long gcd(long long a, long long b){if( b == 0 )return a;else return gcd(b, a % b);}Fraction reduction(Fraction a){if(a.down < 0) {a.up *= -1;a.down *= -1;}if(a.up == 0){a.down = 1;} else {int d = gcd(a.up, a.down);a.up /= d;a.down /= d;}return a;}Fraction add(Fraction a, Fraction b){Fraction temp;temp.up = a.up * b.down + a.down * b.up;temp.down = a.down * b.down;return reduction(temp);}void show_Fra(Fraction a){reduction(a);if(a.down == 1) printf("%lld",a.up);else if(abs(a.up) > a.down) printf("%lld %lld/%lld",a.up / a.down, a.up - a.down * (a.up / a.down), a.down);else printf("%lld/%lld",a.up, a.down);}int main(){int n;scanf("%d",&n);vector<Fraction> Fra_list(n);for(int i = 0; i < n; i++){scanf("%lld/%lld", &Fra_list[i].up, &Fra_list[i].down);}Fraction result;result.up = 0, result.down = 1;for(int i = 0; i < n; i++){result = add(result, Fra_list[i]);}show_Fra(result);return 0;}
