PAT-A1081. Rational Sum (20)

来源:互联网 发布:彩影软件 arp 编辑:程序博客网 时间:2024/06/14 00:26

分数处理,简化,输出要会。

#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>using namespace std;#define MAX 100+10struct Fraction{long long up;long long down;}fraction[MAX], sum;int gcd(int a, int b){if (b == 0)return a;elsereturn gcd(b, a%b);}void reduction(Fraction &f){if (f.down < 0){f.down *= -1;f.up *= -1;}if (f.up == 0)f.down = 1;int d = gcd(abs(f.up), f.down);f.up /= d;f.down /= d;return;}Fraction add(Fraction f1, Fraction f2){Fraction r;r.down = f1.down * f2.down;r.up = f1.up*f2.down + f2.up*f1.down;reduction(r);return r;}int main(){//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);int N = 0;scanf("%d", &N);for (int i = 0; i < N; i++){scanf("%lld/%lld", &fraction[i].up, &fraction[i].down);reduction(fraction[i]);}sum = fraction[0]; for (int i = 1; i < N; i++){sum = add(sum, fraction[i]);}if (sum.down == 1)printf("%lld", sum.up);else if (abs(sum.up) > sum.down)printf("%lld %lld/%lld", sum.up/sum.down, (abs(sum.up))%sum.down, sum.down);elseprintf("%lld/%lld", sum.up, sum.down);return 0;}


0 0
原创粉丝点击