1088. Rational Arithmetic (20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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 思路 分数的四则运算,难点主要是在输出数据的格式化(参见代码stringFormat函数)上,比较考验耐心和逻辑,仔细就行。 代码
#include<iostream>
using namespace std;
typedef long long ll; ll a,b,c,d,gcdvalue; ll gcd(ll a,ll b)
{
return b == 0?abs(a):gcd(b,a % b);
} string stringFormat(ll a,ll b)
{
string res = "";
gcdvalue = gcd(a,b);
a /= gcdvalue;
b /= gcdvalue;
if(a * b < 0)
res += "(-";
ll c = abs(a), d = abs(b);
if(c/d == 0)
{
if( c % d == 0)
res += "0";
else
res += to_string(c) + "/" +to_string(d);
}
else
{
res += to_string(c/d);
if(c % d != 0)
{
res += " " + to_string(c % d) + "/" +to_string(d);
}
}
if(a * b < 0)
res += ")";
return res;
} int main()
{
scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);
ll sum1,sum2,sub1,sub2,mul1,mul2,div1,div2;
//sum
sum1 = a * d + b * c;
sum2 = b * d;
sub1 = a * d - b * c;
sub2 = b * d;
mul1 = a * c;
mul2 = b * d;
div1 = a * d;
div2 = b * c;
string a1 = stringFormat(a,b);
string a2 = stringFormat(c,d);
cout << a1 << " + " << a2 <<" = " << stringFormat(sum1,sum2) << endl;
cout << a1 << " - " << a2 <<" = " << stringFormat(sub1,sub2) << endl;
cout << a1 << " * " << a2 <<" = " << stringFormat(mul1,mul2) << endl;
if(a2 != "0")
cout << a1 << " / " << a2 <<" = " << stringFormat(div1,div2) << endl;
else
cout << a1 << " / " << a2 <<" = " << "Inf" << endl;
}

  

PAT1088:Rational Arithmetic的更多相关文章

  1. pat1088. Rational Arithmetic (20)

    1088. Rational Arithmetic (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue F ...

  2. PAT 1088 Rational Arithmetic[模拟分数的加减乘除][难]

    1088 Rational Arithmetic(20 分) For two rational numbers, your task is to implement the basic arithme ...

  3. PAT_A1088#Rational Arithmetic

    Source: PAT A1088 Rational Arithmetic (20 分) Description: For two rational numbers, your task is to ...

  4. A1088. Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  5. 1088 Rational Arithmetic(20 分)

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  6. PAT Rational Arithmetic (20)

    题目描写叙述 For two rational numbers, your task is to implement the basic arithmetics, that is, to calcul ...

  7. PAT 1088. Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  8. PAT甲级——A1088 Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  9. PAT Advanced 1088 Rational Arithmetic (20) [数学问题-分数的四则运算]

    题目 For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate ...

随机推荐

  1. 聊聊javaMail

    今天闲着无事 看了看用java发送邮件的相关知识 代码参考自<<精通Java Web整合开发(JSP+AJAX+Struts+Hibernate)>>(第2版) 不多说 先上图 ...

  2. Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置

    Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这 ...

  3. 《java入门第一季》之参数引用

    Java中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响. 引用类型:形式参数的改变直接影响实际参数. */ class ArgsDemo { public static void ma ...

  4. 【一天一道LeetCode】#5 Longest Palindromic Substring

    一天一道LeetCode系列 (一)题目 Given a string S, find the longest palindromic substring in S. You may assume t ...

  5. 物理引擎中velocity的单位是个什么鬼?

    现在, 你可能对于什么是velocity的单位感到奇怪.他是单位秒中经过点的一个可测量的量(pt/s).如果你想要在iphone横屏从左往右的移动物体,并且你想在1秒内移动1024个点,那么物体的x速 ...

  6. LeetCode之“动态规划”:Valid Parentheses && Longest Valid Parentheses

    1. Valid Parentheses 题目链接 题目要求: Given a string containing just the characters '(', ')', '{', '}', '[ ...

  7. C语言笔试经典--求分数数列的和

    题目: 求数组的和    2   3/2   5/3   8/5  13/8   21/13  ...    求前20项的和 //求分数数列的和 #include<stdio.h> // ...

  8. Hadoop基本知识,(以及MR编程原理)

     hadoop核心是:MapReduce和HDFS (对应着job执行(程序)和文件存储系统(数据的输入和输出)) CRC32作数据交验:在文件Block写入的时候除了写入数据还会写入交验信息,在读取 ...

  9. javac编译同一个包内的java文件

    问题描述:包a.b.c里有d.java e.java f.java三个文件,其中d中包含main. 错误: 第一种:javac d.java 报错:里面用到其他类,找不到 第二种:javac *.ja ...

  10. Github上的原文XMPP环境搭建步骤,英语能力差不多的可以看看

    Getting started using XMPPFramework on iOS Here is a post on StackOverflow describing how to install ...