这道题能够说是我目前刷到的patb组里最麻烦的一道题

次要是带分数这玩意曾经记不清多少年都没碰过了,而且各种状况非常容易思考不全

最初靠本人也没写出个能全过的解,起初一看是数太大了而我全程都在用int的问题,能够说是百密一疏……

这里附上柳神的赏心悦目的c++解法,正文我写的,而后前面的解析由chatglm4生成,不便了解。

#include <iostream>#include <cmath>using namespace std;long long a, b, c, d;// 计算两个数的最大公约数long long gcd(long long t1, long long t2){    return t2 == 0 ? t1 : gcd(t2, t1 % t2);}void func(long long m, long long n){    if (m * n == 0)    {        printf("%s", n == 0 ? "Inf" : "0");        return;    }    // 符号判断    bool flag = ((m < 0 && n > 0) || (m > 0 && n < 0));    // 分数化简运算时不思考正负,先取绝对值!!    m = abs(m);    n = abs(n);    long long x = m / n; // 整数位    printf("%s", flag ? "(-" : "");    if (x != 0)        printf("%lld", x);    if (m % n == 0)    { // 判断是否只有整数        if (flag)            printf(")"); // 如果是负整数,则补全括号 (正整数没括号)        return;    }    if (x != 0)        printf(" "); // x不为0,则输入空格 (且整数的状况已在后面提前返回,不会运行到这)    m = m - x * n;   // 真分子    long long t = gcd(m, n);    m = m / t;    n = n / t; // 约分成最简分式    printf("%lld/%lld%s", m, n, flag ? ")" : "");}int main(){    scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);    func(a, b);    printf(" + ");    func(c, d);    printf(" = ");    func(a * d + b * c, b * d);    printf("\n"); // a/b+c/d通分公式,输入有理化后的后果    func(a, b);    printf(" - ");    func(c, d);    printf(" = ");    func(a * d - b * c, b * d);    printf("\n");    func(a, b);    printf(" * ");    func(c, d);    printf(" = ");    func(a * c, b * d);    printf("\n");    func(a, b);    printf(" / ");    func(c, d);    printf(" = ");    func(a * d, b * c);    return 0;}

这段代码是一个C++程序,用于解决分数的加减乘除运算,并且输入后果。程序首先定义了一个计算最大公约数的函数gcd,而后定义了一个解决分数并格式化输入的函数func。主函数main中读取用户输出的两个分数,而后别离计算它们的和、差、积、商,并输入后果。
程序应用scanf函数从规范输出读取两个分数,格局为%lld/%lld %lld/%lld,别离对应四个长整型变量a, b, c, d。这里的%lld是读取长整型的格局指定符。
func函数是程序的外围,它承受两个长整型参数mn,别离代表分数的分子和分母。函数首先查看分子或分母是否为0,如果是,则依据状况输入Inf(无穷大)或0。接着,函数解决分数的正负号,并计算分数的整数局部x。而后,函数通过计算最大公约数来简化分数,并依照格局输入分数。
main函数中,程序别离计算了两个分数的和、差、积、商,并调用func函数输入后果。加减运算通过通分后相加或相减来实现,乘法通过分子相乘、分母相乘来实现,除法令是通过分子乘以另一个分数的分母、分母乘以另一个分数的分子来实现。
程序的输入格式化得很好,可能解决正负整数和分数,以及它们的运算后果。