题意:

输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式。小数需要用"("和")"括起来,分母为0的话输出"Inf"(输入的分母保证不为0)。

trick:

测试点2很容易溢出,建议遇到乘法时先化简分数并且不要用相乘小于零来判断异号。

AAAAAccepted code:

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long a,b,c,d;
cin>>a;
cin.ignore();
cin>>b>>c;
cin.ignore();
cin>>d;
long long x=1e9,y=1e9;
if(a%b==)
x=a/b;
if(c%d==)
y=c/d;
long long gcd=__gcd(a,b);
a/=gcd;
b/=gcd;
gcd=__gcd(c,d);
c/=gcd;
d/=gcd;
if(x<1e9){
if(x<)
cout<<"("<<x<<")";
else
cout<<x;
}
else{
long long ta=a,tb=b;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" + ";
if(y<1e9){
if(y<)
cout<<"("<<y<<")";
else
cout<<y;
}
else{
long long ta=c,tb=d;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" = ";
long long cd=b*d;
long long ab=a*d+c*b;
if(ab%cd==){
long long z=ab/cd;
if(z<)
cout<<"("<<z<<")";
else
cout<<z;
}
else if(ab<&&cd>||ab>&&cd<){
if(ab<)
ab=-ab;
if(cd<)
cd=-cd;
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd<<")";
}
else{
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd;
}
cout<<"\n";
//加减法分割线-------------
if(x<1e9){
if(x<)
cout<<"("<<x<<")";
else
cout<<x;
}
else{
long long ta=a,tb=b;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" - ";
if(y<1e9){
if(y<)
cout<<"("<<y<<")";
else
cout<<y;
}
else{
long long ta=c,tb=d;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" = ";
cd=b*d;
ab=a*d-c*b;
if(ab%cd==){
long long z=ab/cd;
if(z<)
cout<<"("<<z<<")";
else
cout<<z;
}
else if(ab<&&cd>||ab>&&cd<){
if(ab<)
ab=-ab;
if(cd<)
cd=-cd;
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd<<")";
}
else{
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd;
}
cout<<"\n";
//减法和乘除法分隔线-------------
if(x<1e9){
if(x<)
cout<<"("<<x<<")";
else
cout<<x;
}
else{
long long ta=a,tb=b;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" * ";
if(y<1e9){
if(y<)
cout<<"("<<y<<")";
else
cout<<y;
}
else{
long long ta=c,tb=d;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" = ";
cd=b*d;
ab=a*c;
if(ab%cd==){
long long z=ab/cd;
if(z<)
cout<<"("<<z<<")";
else
cout<<z;
}
else if(ab<&&cd>||ab>&&cd<){
if(ab<)
ab=-ab;
if(cd<)
cd=-cd;
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd<<")";
}
else{
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd;
}
cout<<"\n";
//乘除法分隔线-------------
if(x<1e9){
if(x<)
cout<<"("<<x<<")";
else
cout<<x;
}
else{
long long ta=a,tb=b;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" / ";
if(y<1e9){
if(y<)
cout<<"("<<y<<")";
else
cout<<y;
}
else{
long long ta=c,tb=d;
if(ta<&&tb>||ta>&&tb<){
if(ta<)
ta=-ta;
if(tb<)
tb=-tb;
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb<<")";
}
else{
long long yushu=;
if(ta>tb){
yushu=ta/tb;
ta-=yushu*tb;
}
if(yushu)
cout<<yushu<<" ";
cout<<ta<<"/"<<tb;
}
}
cout<<" = ";
cd=b*c;
ab=a*d;
if(cd==){
cout<<"Inf";
return ;
}
if(ab%cd==){
long long z=ab/cd;
if(z<)
cout<<"("<<z<<")";
else
cout<<z;
}
else if(ab<&&cd>||ab>&&cd<){
if(ab<)
ab=-ab;
if(cd<)
cd=-cd;
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
cout<<"(-";
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd<<")";
}
else{
long long yushu=;
if(ab>cd){
yushu=ab/cd;
ab-=yushu*cd;
}
long long gcd=__gcd(ab,cd);
ab/=gcd;
cd/=gcd;
if(yushu)
cout<<yushu<<" ";
cout<<ab<<"/"<<cd;
}
return ;
}

【PAT甲级】1088 Rational Arithmetic (20 分)的更多相关文章

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

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

  2. PAT 甲级 1035 Password (20 分)

    1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...

  3. PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)

    1073 Scientific Notation (20 分)   Scientific notation is the way that scientists easily handle very ...

  4. PAT 甲级 1050 String Subtraction (20 分) (简单送分,getline(cin,s)的使用)

    1050 String Subtraction (20 分)   Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be t ...

  5. PAT 甲级 1046 Shortest Distance (20 分)(前缀和,想了一会儿)

    1046 Shortest Distance (20 分)   The task is really simple: given N exits on a highway which forms a ...

  6. PAT 甲级 1042 Shuffling Machine (20 分)(简单题)

    1042 Shuffling Machine (20 分)   Shuffling is a procedure used to randomize a deck of playing cards. ...

  7. PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)

    1041 Be Unique (20 分)   Being unique is so important to people on Mars that even their lottery is de ...

  8. PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))

    1015 Reversible Primes (20 分)   A reversible prime in any number system is a prime whose "rever ...

  9. PAT甲级——1152.Google Recruitment (20分)

    1152 Google Recruitment (20分) In July 2004, Google posted on a giant billboard along Highway 101 in ...

随机推荐

  1. Laravel中如何做数据库迁移

    总的来说,做一次独立数据库迁移只需要三步,分别是创建迁移文件.修改迁移文件.运行迁移 1.创建数据库迁移文件php artisan make:migration create_articles_tab ...

  2. C#中向ListView控件中添加一行数据

    C#中向ListView控件中添加一行数据: ,先声明一个ListViewItem: ListViewItem item = new ListViewItem(); ,添加第一列数据: item.Te ...

  3. Whctf 2017 -UNTITLED- Writeup

    Whctf 2017 -UNTITLED- Writeup 转载请表明出处http://www.cnblogs.com/WangAoBo/p/7541481.html 分析: 下载下来的附件是一个py ...

  4. Charles 查看https请求数据 Mac/ android

    Charles_v4.0.1_Mac_破解版下载地址:https://pan.baidu.com/s/1c23VPuS 1.在Mac电脑上安装Charles的根证书 打开Charles->菜单H ...

  5. 前后端分离构架 与 json ajax简介

    前后端分离 传统开发方式 曾几何时,JSP和Servlet为Java带来了无限风光,一时间大红大紫,但随着互联网的不断发展,这样的开发方式逐渐显露其弊端,在移动互联网炙手可热的今天,应用程序对于后台服 ...

  6. 松软科技课堂:jQuery 语法

    jQuery 语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(select ...

  7. 2020年国外PhD申请QQ群907928541

    2020年申请国外读博的 可以加QQ群:907928541 供大家学习交流套磁!

  8. Web API和Web Service

    首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service.其次,两者都有利于信息的传输,但Web API ...

  9. AcWing 5. 多重背包问题 II

    //二进制优化 最后变为01背包 #include <iostream> #include <algorithm> using namespace std; , M = ; i ...

  10. Android 使用 MPAndroidChart 实现折线图

    Android 使用 MPAndroidChart 实现折线图 做Android项目的时候用到了折线图,不光折线图,还可能遇到很多的图表需要展示渲染,自己手画的话那好玩了,今天使用MPAndroidC ...