1081. Rational Sum (20)解题报告

来源:互联网 发布:网络文明主题班会教案 编辑:程序博客网 时间:2024/06/03 16:49

不要使用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[n];    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;}
0 0
原创粉丝点击