首页 > 其他分享 >有理数运算

有理数运算

时间:2022-08-22 12:34:14浏览次数:66  
标签:有理数 运算 gcd LL cout printf minus lld

https://www.acwing.com/problem/content/description/1580/

思路:
这题思路并不难,但如果你傻乎乎的一种一种情况的输出,那会非常的繁琐,巧妙的利用一个函数来统一起来实现。

#include <iostream>

using namespace std;

typedef long long LL;

LL gcd(LL a, LL b)
{
    return b ? gcd(b, a % b) : a;
}

void print(LL a, LL b)
{
    LL d = gcd(a, b);
    a /= d, b /= d;

    if (b < 0) a *= -1, b *= -1;
    bool is_minus = a < 0;

    if (is_minus) cout << "(";

    if (b == 1) cout << a;
    else
    {
        if (abs(a) >= b) printf("%lld ", a / b), a = abs(a) % b;
        printf("%lld/%lld", a, b);
    }

    if (is_minus) cout << ")";
}

void add(LL a, LL b, LL c, LL d)
{
    print(a, b), cout << " + ", print(c, d), cout << " = ";
    a = a * d + b * c;
    b = b * d;
    print(a, b), cout << endl;
}

void sub(LL a, LL b, LL c, LL d)
{
    print(a, b), cout << " - ", print(c, d), cout << " = ";
    a = a * d - b * c;
    b = b * d;
    print(a, b), cout << endl;
}

void mul(LL a, LL b, LL c, LL d)
{
    print(a, b), cout << " * ", print(c, d), cout << " = ";
    a = a * c;
    b = b * d;
    print(a, b), cout << endl;
}

void div(LL a, LL b, LL c, LL d)
{
    print(a, b), cout << " / ", print(c, d), cout << " = ";
    if (!c) puts("Inf");
    else
    {
        a = a * d;
        b = b * c;
        print(a, b), cout << endl;
    }
}

int main()
{
    LL a, b, c, d;
    scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);

    add(a, b, c, d);
    sub(a, b, c, d);
    mul(a, b, c, d);
    div(a, b, c, d);

    return 0;
}

标签:有理数,运算,gcd,LL,cout,printf,minus,lld
From: https://www.cnblogs.com/xjtfate/p/16612432.html

相关文章

  • JavaScript快速入门-04-运算符
    4运算符4.1算术运算符4.1.1概述  JavaScript提供的算术运算符如下所示:类型符号示例加法运算符+a+b减法运算符-a-b乘法运算符*a*b除......
  • JAVA基础--运算符--2022年8月20日
    第一节1、算数运算符有哪些+ - * / %2、/需要注意什么,为什么?两个整数相除,结果一定也是整数,因为最高类型是整数 第二节把数字321拆分成3  2......
  • mysql-运算符
    1.算数运算符2.比较运算符安全等于运算符<=>可以用来对NULL进行判断,左右两值均为NULL则结果为13.非符号运算符(关键字运算符)ISNULL判断值,字符串或表达式是否为......
  • 运算符
    隐式转换两种类型的变量在进行运算或比较时,一种类型会向类一种进行转化,然后再进行比较和运算加法作为算数运算符(除string类型外的原始数据类型进行加法运算时)非数......
  • C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
    作者:目录一、缘由二、使用向量类型2.1基本算法2.2使用大小固定的向量(如Vector4)2.2.1介绍2.2.2用Vector4编写浮点数组求和函数2.3使用大小与硬件相关的向量(如Vector......
  • 取模运算的应用
    取模运算的应用LeetCode里遇到了很多求数量的题目,由于数量过于庞大,最终会要求返回(int)(result%Long),其中Long代表一个比较大的数,比如10^9+1今天再次遇到了这种......
  • 教练!我不想遍历了!——用bool运算有效减少dataframe的时间复杂度
    方法参考:python-降低pythonfor循环的时间复杂度-堆栈内存溢出(stackoom.com)朋友们,朋友们,事情是这样的。这几天博主在处理数据的时候遇到了这样的标注数据: ......
  • 【Java基础】三元运算符 a>b ? 1 : 2 ;
    1.三元运算符a>b?true:false;可以简化为if-else语句if(a>b){ System.out.println("true");}else{ System.out.println("false");}2.运算符的优先级只有单目运......
  • 【Java基础】位运算<<,>>,>>>,&,|,^,~
    1.位运算符位运算符是对整数的二进制进行的运算。2.位运算符细节<<:在一定范围内,每向左移1位,相当于*2>>:在一定范围内,每向右移1位,相当于/2>>>表示无符号右移运......
  • 【Java基础】逻辑运算符&,&&,|,||,!,^
    1.逻辑运算符用于连接布尔型表达式,例如:x>3&&x<62.&和&&的区别表示and(1)&,左边无论真假,右边都进行运算。(2)&&,如果左边为真,右边参与运算;如果左边为假,那么右边不参与......