【PAT甲级】1088 Rational Arithmetic (20 分)
题意:
输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式。小数需要用"("和")"括起来,分母为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 分)的更多相关文章
- PAT Advanced 1088 Rational Arithmetic (20) [数学问题-分数的四则运算]
题目 For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate ...
- PAT 甲级 1035 Password (20 分)
1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...
- PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)
1073 Scientific Notation (20 分) Scientific notation is the way that scientists easily handle very ...
- PAT 甲级 1050 String Subtraction (20 分) (简单送分,getline(cin,s)的使用)
1050 String Subtraction (20 分) Given two strings S1 and S2, S=S1−S2 is defined to be t ...
- PAT 甲级 1046 Shortest Distance (20 分)(前缀和,想了一会儿)
1046 Shortest Distance (20 分) The task is really simple: given N exits on a highway which forms a ...
- PAT 甲级 1042 Shuffling Machine (20 分)(简单题)
1042 Shuffling Machine (20 分) Shuffling is a procedure used to randomize a deck of playing cards. ...
- PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)
1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is de ...
- PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))
1015 Reversible Primes (20 分) A reversible prime in any number system is a prime whose "rever ...
- PAT甲级——1152.Google Recruitment (20分)
1152 Google Recruitment (20分) In July 2004, Google posted on a giant billboard along Highway 101 in ...
随机推荐
- python3练习100题——006
继续做题-经过py3测试 原题链接:http://www.runoob.com/python/python-exercise-example6.html 题目:斐波那契数列. 我的代码: def fi ...
- http请求常见错误状态码
一.HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. 原因:(调用方接口方法的实参和服务器接口方法的形参不一致) 1.前端提交数据 ...
- win32 用户自定义消息范围
WINDOWS自定义消息WM_USER和WM_APP WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF. #de ...
- mybatis(六):设计模式 - 适配器模式
- Linux find命令:在目录中查找文件(超详解)
find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件.但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,f ...
- Linux - Shell - shell 执行方式
概述 shell 的执行方式 背景 偶尔执行个 shell 脚本 一般都用 './script' 执行 最近忽然看到 有不同的执行方式, 感觉有必要整理一下, 然后和大家分享 准备 os centos ...
- winform学习(4)控件的添加、显示和隐藏
窗体的添加.显示与隐藏 可以直接通过工具栏将某个控件直接拖动至UI界面(也可以在工具栏里双击某个控件) 也可以在代码里直接添加:窗体的标识.Controls.Add(控件标识符); Button my ...
- Python出现Could not find a version that satisfies the requirement openpyxl (from versions: )
一.环境使用python3.7时,用pip安装openpyxl出现如下错误: 系统环境:windows10家庭版Python版本:python3.7.1IDE:sublime_text 3二. 解决方 ...
- C#对字典Dictionary 的添加,遍历,移除系列操作
C#对字典Dictionary 的添加,遍历,移除系列操作: //一.创建泛型哈希表,然后加入元素 Dictionary<string, string> oscar = new Dicti ...
- 使用maven 打包springboot项目步骤以及所遇到的问题
1.首先必须确保java和maven是安装好的,并且环境变量配置正确 2.接着可以看一下我们项目中的pom.xml中的以下配置 packaging那里很关键,表示我们打包项目的类型,可以为jar 也可 ...