题意:

输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式。小数需要用"("和")"括起来,分母为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. sql 应用记录

    SELECT * FROM (select aa.*,bb.mentalvisitid, ' then '家庭访视' else '电话' end as BCSFXS ,bb.visitdate, ' ...

  2. Android 开发压缩图片

    private Bitmap imageZoom(int position , Bitmap bitMap) {        //图片允许最大空间         double maxSize =2 ...

  3. 计数器IP核

    Quartus II提供的LPM_couter IP核的使用 FPGA设计方式: 原理图,Verilog HDL设计方式,IP核输入方式 创建IP核 点击TOOLS—IP catalog-libray ...

  4. fpga vga 显示

    VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高.显示速率快.颜色丰富等优点,在彩色显示器领域得到了广泛的应用.不支持热插拔, ...

  5. kmp算法基础

    https://www.luogu.com.cn/problemnew/solution/P3375 #include<bits/stdc++.h> using namespace std ...

  6. MySQL学习(九)小结

    redo-log 和 bin-log 是如何联系起来的? update 语句在更新的时候先更新内存后,写 redo-log 然后 bin-log ,其中后面一步是使用了两阶段提交, 也就是每一个更新都 ...

  7. C#中的@和$ 占位符

    c#中@的三种用法: 1.忽略转移字符 string str = "C:\\windows\\system32"; string str = @"C:\windows\s ...

  8. 每天进步一点点------ModelSim仿真Altera的ROM

    1. 在QuartusII中生成rom的初始化文件,可以是hex,也可以是mif.MIF文件的格式很简单明了,所以我一向都是用MIF. 2.下载convert_hex2ver.dll文件,conver ...

  9. Java8 Time API与老Date之间的转换

    前面我已经总结了Java8 Time API常用的一些方法.封装的工具类,可是最近需要对一个比较老的项目进行重构,大致看了一下使用的Jdk还是7而且里面的时间工具类还是使用的Date和Calendar ...

  10. springboot项目入门解析

                     config:主要用来存储配置文件,以及其他不怎么动用的信息. controller:项目的主要控制文件 dao:           主要用来操作数据库 entit ...