1081. Rational Sum (20)解题报告
2016-11-26 19:02
357 查看
不要使用abs函数,因为它的形参是int类型。
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstdlib> #include <cmath> struct RationalNum { long long numerator, denominator; }; RationalNum add(RationalNum n1, RationalNum n2); long long gcd(long long n1, long long n2); void printsum(RationalNum n); int main(void) { RationalNum *arr, sum; int n, i; scanf("%d", &n); arr = new RationalNum ; for (i = 0; i < n; i++) { scanf("%lld/%lld", &arr[i].numerator, &arr[i].denominator); } sum = arr[0]; for (i = 1; i < n; i++) { sum = add(sum, arr[i]); } printsum(sum); delete[] arr; return 0; } RationalNum add(RationalNum n1, RationalNum n2) { RationalNum sum; long long factor1, factor2, factor3; factor1 = gcd(n1.denominator, n2.denominator); factor2 = n1.denominator / factor1; factor3 = n2.denominator / factor1; sum.denominator = factor1 * factor2 * factor3; n1.numerator *= factor3; n2.numerator *= factor2; sum.numerator = n1.numerator + n2.numerator; factor1 = gcd(sum.numerator, sum.denominator); sum.numerator /= factor1; sum.denominator /= factor1; if (!sum.numerator) { sum.numerator = 0; sum.denominator = 1; } return sum; } long long gcd(long long n1, long long n2) { long long n3; if (n1 && n2) { if (n1 < 0) { n1 = -n1; } if (n2 < 0) { n2 = -n2; } while (n1 % n2) { n3 = n1 % n2; n1 = n2; n2 = n3; } return n2; } else { return 1; } } void printsum(RationalNum n) { long long integer, numerator, denominator, factor, character; factor = gcd(n.numerator, n.denominator); denominator = n.denominator / factor; numerator = n.numerator / factor; if (numerator >= 0) { character = 1; } else { character = -1; numerator = -numerator; } integer = numerator / denominator; numerator %= denominator; if (integer) { integer *= character; if (numerator) { printf("%lld %lld/%lld\n", integer, numerator, denominator); } else { printf("%lld\n", integer); } } else { numerator *= character; if (numerator) { printf("%lld/%lld\n", numerator, denominator); } else { printf("%lld\n", 0); } } return; }
相关文章推荐
- PAT (Advanced Level) 1005. Spell It Right (20) 解题报告
- PAT 1081. Rational Sum (20)(分数加法)(待修改)
- 1081. Rational Sum (20)
- 1096. Consecutive Factors (20)解题报告
- 1104. Sum of Number Segments (20)解题报告
- PAT (Advanced Level) Practise 1081 Rational Sum (20)
- 关于‘1001.A+B Format (20)’的解题报告
- PAT 1081. Rational Sum (20) GCD
- TYVJ 1081 最近距离 解题报告
- PAT A 1081. Rational Sum (20)
- PAT甲级1001. A+B Format (20)解题报告
- 1081. Rational Sum (20)
- PAT (Advanced Level) 1100. Mars Numbers (20) 解题报告
- PAT 解题报告 1050. String Subtraction (20)
- 1081. Rational Sum (20)
- PAT (Advanced Level) 1008. Elevator (20) 解题报告
- 1081. Rational Sum (20)-PAT甲级真题
- PAT (Advanced Level) 1124. Raffle for Weibo Followers (20) 解题报告
- [PAT]1081 Rational Sum (20)
- 1116. Come on! Let's C (20)解题报告