PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034

本题要求编写程序,计算2个有理数的和、差、积、商。

输入格式:

输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。

输出格式:

分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。

输入样例1:

2/3 -4/2

输出样例1:

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

输入样例2:

5/3 0/6

输出样例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 分析:本题目没有思维的难度,只是可能处理起来有点啰嗦烦人,所以建议一定要单独写成小功能函数。
比如:
1. 输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分
2. 若为负数,则须加括号
3. 若除法分母为0,则输出“Inf”。
 #include<stdio.h>

     void jianhua(long long  *fenzi,long long  *fenmu)
{
if(*fenzi== || *fenmu==)
{
*fenzi=,*fenmu=;
return;
} int flag1=,flag2= ;// 1负数 2正数
if(*fenzi<) flag1=,*fenzi=-*fenzi;
if(*fenmu<) flag2=,*fenmu=-*fenmu; long long max=,min=;
if(*fenzi>*fenmu) max=*fenzi,min=*fenmu;
else min=*fenzi,max=*fenmu;
while(max%min)
{
if(max-min>min)
max=max-min;
else
{
min=max-min;
max=max-min;
}
}
*fenzi/=min,*fenmu/=min; if(flag1) *fenzi=-*fenzi;
if(flag2) *fenmu=-*fenmu;
if(*fenmu<) *fenzi=-*fenzi,*fenmu=-*fenmu; return;
} void outlook(long long a,long long b,int i,long long c) //输出 函数
{
int flag=;
if(a<) {flag=;a=-a;printf("(-");} if(i== && c==) printf("Inf"); //i==3时代表除法运算
else if(a==) printf(""); //分子为0,即数==0
else if(a/b) { if(a%b) printf("%lld %lld/%lld",a/b,a%b,b);
else printf("%lld",a/b);
}else printf("%lld/%lld",a,b); //可以整除,即简化为整数 if(flag) printf(")");
} int main()
{
long long *pfenzi=,*pfenmu=;
long long a=,b=,c=,d=,fenzi=,fenmu=; //因为两个整数相乘,可能超出int范围,所以使用了long long
scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d); pfenzi=&a;
pfenmu=&b;
jianhua(pfenzi,pfenmu); //第一个数
pfenzi=&c;
pfenmu=&d;
jianhua(pfenzi,pfenmu); //第二个数
char op[]={'+','-','*','/'};
for(int i=;i<;i++)
{
//'+','-','*','/' 依次处理
if(==i) { fenzi=a*d+c*b; fenmu=b*d; }
else if(==i) { fenzi=a*d-c*b; fenmu=b*d; }
else if(==i) { fenzi=a*c; fenmu=b*d; }
else { fenzi=a*d; fenmu=b*c; }
pfenzi=&fenzi;
pfenmu=&fenmu;
jianhua(pfenzi,pfenmu); // 简化当前处理运算的结果 // 格式输出
if(i) printf("\n");
outlook(a,b,i,); //第一个数
printf(" %c ",op[i]); // 运算符
outlook(c,d,i,); //第二个数
printf(" = ");
outlook(fenzi,fenmu,i,c); //结果
} return ;
}

好讨厌这道题。。。难度不高,却这么复杂。。。好考验耐心。。。

												

PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)的更多相关文章

  1. PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)

    PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...

  2. PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)

    PAT (Basic Level) Practise (中文)-  1022. D进制的A+B (20)  http://www.patest.cn/contests/pat-b-practise/1 ...

  3. PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)

    PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...

  4. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  5. PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)

    PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)    http://www.patest.cn/contests/pat-b-practise/10 ...

  6. PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)

    PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)  http://www.patest.cn/contests/pat-b-practise/1027 本题 ...

  7. PAT (Basic Level) Practise (中文)-1028. 人口普查(20)

    PAT (Basic Level) Practise (中文)-1028. 人口普查(20)   http://www.patest.cn/contests/pat-b-practise/1028 某 ...

  8. PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)

    PAT (Basic Level) Practise (中文)-1029. 旧键盘(20) http://www.patest.cn/contests/pat-b-practise/1029 旧键盘上 ...

  9. PAT (Basic Level) Practise (中文)-1030. 完美数列(25)

    PAT (Basic Level) Practise (中文)-1030. 完美数列(25)   http://www.patest.cn/contests/pat-b-practise/1030 给 ...

随机推荐

  1. MYSQL5.7版本解决sql_mode=only_full_group_by问题

    在安装有些二开框架时会遇到下面的问题,在填写完数据库密码之后他会提示你请在mysql配置文件中修改ql-mode去掉ONLY_FULL_GROUP_BY,但是我们去mysql的配置文件中查找此配置,有 ...

  2. POJ3463【次短路】

    转自:http://www.cnblogs.com/jackge/archive/2013/04/29/3051273.html 算法:最短路和次短路.Dijkstra算法.采用邻接表建图. 总结:不 ...

  3. C\C++书籍

    原文链接: bert hubert   翻译: 伯乐在线- 周昌鸿译文链接: http://blog.jobbole.com/61308/ 人们常常问我有什么C++和编程的书籍推荐,也许是因为我在Po ...

  4. numpy windows环境下载安装

    由于numpy在多个平台下非常流行,以至于习惯WINDOWS环境下的用户可能找不到下载位置,更多的时候会下载到zip文件,然后需要安装编译(自然通不过) 1.http://www.scipy.org/ ...

  5. 2014-9-9 NOIP模拟赛

    东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时 ...

  6. mysql--浅谈视图1

    这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师. 依赖软件:mysql5.6 系统环境:win 视图(view) 什么是视图? 答:视图是表通过某种运算得到的一个投影,占有一定空间的 ...

  7. luoguP4242树上的毒瘤

    传送门 模板集合吧,除了码农,没啥难的... 和bzoj2243:[SDOI2011]染色十分相像,但是多了点集和查询的区别 然后点集显然可以看出是虚树问题,查询可以用点分治\(O(nlogn)\), ...

  8. hadoop HA集群搭建(亲测)

    1.hadoop-env.sh 2.core-site.xml <configuration> <!-- 指定hdfs的nameservice为ns1 --> <prop ...

  9. JS实现 类的 1.判断 2.添加 3.删除 4切换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. go系列(1)- linux下安装go环境

    安装GO 打开安装包下载地址,查看linux下go的最新版本 https://golang.google.cn/dl/ 经查看go的最新版本为go1.11.4.linux-amd64.tar.gz 右 ...