1088. Rational Arithmetic (20)——PAT (Advanced Level) Practise

题目信息

1088. Rational Arithmetic (20)

时间限制200 ms

内存限制65536 kB

代码长度限制16000 B

For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate their sum, difference, product and quotient.

Input Specification:

Each input file contains one test case, which gives in one line the two rational numbers in the format “a1/b1 a2/b2”. The numerators and the denominators are all in the range of long int. If there is a negative sign, it must appear only in front of the numerator. The denominators are guaranteed to be non-zero numbers.

Output Specification:

For each test case, print in 4 lines the sum, difference, product and quotient of the two rational numbers, respectively. The format of each line is “number1 operator number2 = result”. Notice that all the rational numbers must be in their simplest form “k a/b”, where k is the integer part, and a/b is the simplest fraction part. If the number is negative, it must be included in a pair of parentheses. If the denominator in the division is zero, output “Inf” as the result. It is guaranteed that all the output integers are in the range of long int.

Sample Input 1:

2/3 -4/2

Sample Output 1:

2/3 + (-2) = (-1 1/3)

2/3 - (-2) = 2 2/3

2/3 * (-2) = (-1 1/3)

2/3 / (-2) = (-1/3)

Sample Input 2:

5/3 0/6

Sample Output 2:

1 2/3 + 0 = 1 2/3

1 2/3 - 0 = 1 2/3

1 2/3 * 0 = 0

1 2/3 / 0 = Inf

解题思路

注意细节即可

AC代码

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

long long gcd(long long a,long long b){
    return b != 0 ? gcd(b, a%b) : a;
}

string f(long long a,long long b){
    if(a==0)
        return "0";
    stringstream ss;
    string s;
    int flag=1;
    if(a<0){
        flag=-1;
        a=-a;
        ss<<"(-";
    }
    long long tmp=gcd(a,b);
    a=a/tmp;
    b=b/tmp;
    if(a%b==0){
        ss<<a/b;
    }else if(a/b>0){
        ss<<a/b<<" ";
        ss<<a%b<<"/"<<b;
    }else{
        ss<<a<<"/"<<b;
    }
    if(flag==-1)
        ss<<")";
    getline(ss,s);
    return s;
}
int main(){
    long a1,b1,a2,b2;
    scanf("%ld/%ld %ld/%ld",&a1,&b1,&a2,&b2);
    long long sum1,sum2,sub1,sub2,mul1,mul2,div1,div2;
    sum1=a1*b2+a2*b1;
    sum2=b1*b2;
    sub1=a1*b2-a2*b1;
    sub2=b1*b2;
    mul1=a1*a2;
    mul2=b1*b2;
    string s1=f(a1,b1);
    string s2=f(a2,b2);
    cout<<s1<<" + "<<s2<<" = "<<f(sum1,sum2)<<endl;
    cout<<s1<<" - "<<s2<<" = "<<f(sub1,sub2)<<endl;
    cout<<s1<<" * "<<s2<<" = "<<f(mul1,mul2)<<endl;
    cout<<s1<<" / "<<s2<<" = ";
    if(a2==0){
        cout<<"Inf";
    }else{
        div1=a1*b2;
        div2=b1*a2;
        if((div1<0&&div2<0)||(div1>0&&div2<0)){
            div1=-div1;
            div2=-div2;
        }
        cout<<f(div1,div2);
    }
    return 0;
}
时间: 2024-10-10 10:17:22

1088. Rational Arithmetic (20)——PAT (Advanced Level) Practise的相关文章

1015. Reversible Primes (20) ——PAT (Advanced Level) Practise

题目信息: 1015. Reversible Primes (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73

1008. Elevator (20)——PAT (Advanced Level) Practise

题目信息: 1008. Elevator (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator w

1001. A+B Format (20) ——PAT (Advanced Level) Practise

题目信息: 1001. A+B Format (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than

1005. Spell It Right (20)——PAT (Advanced Level) Practise

题目信息: 1005. Spell It Right (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English. Input Specificat

1011. World Cup Betting (20)——PAT (Advanced Level) Practise

题目信息: 1011. World Cup Betting (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing

1096. Consecutive Factors (20)——PAT (Advanced Level) Practise

题目信息 1096. Consecutive Factors (20) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B Among all the factors of a positive integer N, there may exist several consecutive numbers. For example, 630 can be factored as 3*5*6*7, where 5, 6, and 7 are the three consecu

1093. Count PAT&#39;s (25)【计数】——PAT (Advanced Level) Practise

题目信息 1093. Count PAT's (25) 时间限制120 ms 内存限制65536 kB 代码长度限制16000 B The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th c

1081. Rational Sum (20)【模拟】——PAT (Advanced Level) Practise

题目信息 1081. Rational Sum (20) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case star

PAT (Advanced Level) 1088. Rational Arithmetic (20)

简单题. 注意:读入的分数可能不是最简的.输出时也需要转换成最简. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include<string> #include<iostream> #include<algor