输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出
如果为负数,则带分数两边要有括号
如果除数为0,则式子中的结果输出Inf
模拟题最好自己动手实现,考验细节处理,其它没啥好说的。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
long long numerator[];
long long denominator[];
long long GCD(long long a,long long b){
a=abs(a);
b=abs(b);
if(b==)
return a;
return GCD(b,a%b); }
struct Fraction{
long long integer;
long long numerator;
long long denominator;
}frac[];
/**
转化成带分数的形式
*/
void transfer(long long numerator,long long denominator,int i){
//long long gcd=GCD(numerator,denominator);
//numerator=numerator/gcd;
//denominator=denominator/gcd;
frac[i].integer=numerator/denominator;
frac[i].numerator=numerator%denominator;
frac[i].denominator=denominator;
}
/**
输出,如果为负数还要有括号
*/
void print(Fraction f){
if(f.integer!=){
if(f.integer<)
printf("(");
printf("%lld",f.integer);
} if(f.numerator!=){
if(f.integer!=){
printf(" ");
}
//如果前面整数部分为0,则这里需要加(
else if(f.numerator<)
printf("(-");
//注意,如果是负数,只要整数前面一个'-'就可以,所以这里不需要'-'
if(f.numerator>)
printf("%lld/%lld",f.numerator,f.denominator);
else
printf("%lld/%lld",-f.numerator,f.denominator);
}
if(f.integer==&&f.numerator==)
printf("");
else if(f.integer< || f.numerator<)
printf(")"); //末尾补)
} int main()
{
long long res;
scanf("%lld/%lld %lld/%lld",&numerator[],&denominator[],&numerator[],&denominator[]);
//先约分
long long gcd0=GCD(numerator[],denominator[]);
numerator[]=numerator[]/gcd0;
denominator[]=denominator[]/gcd0;
long long gcd1=GCD(numerator[],denominator[]); numerator[]=numerator[]/gcd1;
denominator[]=denominator[]/gcd1; long long gcd=GCD(denominator[],denominator[]);
long long lcm=(denominator[]/gcd)*gcd*(denominator[]/gcd);
transfer(numerator[],denominator[],);
transfer(numerator[],denominator[],);
//sum
long long sum=numerator[]*(lcm/denominator[])+numerator[]*(lcm/denominator[]);
long long gcd2=abs(GCD(sum,lcm));
transfer(sum/gcd2,lcm/gcd2,);
print(frac[]);
printf(" + ");
print(frac[]);
printf(" = ");
print(frac[]);
printf("\n"); //difference
sum=numerator[]*(lcm/denominator[])-numerator[]*(lcm/denominator[]);
gcd2=abs(GCD(sum,lcm));
transfer(sum/gcd2,lcm/gcd2,);
print(frac[]);
printf(" - ");
print(frac[]);
printf(" = ");
print(frac[]);
printf("\n"); //product
sum=numerator[]*numerator[];
res=denominator[]*denominator[];
gcd2=abs(GCD(sum,res));
transfer(sum/gcd2,res/gcd2,);
print(frac[]);
printf(" * ");
print(frac[]);
printf(" = ");
print(frac[]);
printf("\n"); //quotient
print(frac[]);
printf(" / ");
print(frac[]);
printf(" = ");
if(numerator[]==){
printf("Inf\n");
}
else{
sum=numerator[]*denominator[];
res=denominator[]*numerator[];
if(res<){
sum=-sum;
res=-res;
} gcd2=abs(GCD(sum,res));
transfer(sum/gcd2,res/gcd2,); print(frac[]);
printf("\n");
} return ;
}

PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算的更多相关文章

  1. PAT甲题题解-1081. Rational Sum (20)-模拟分数计算

    模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...

  2. PAT甲题题解-1042. Shuffling Machine (20)-模拟

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  3. PAT甲题题解-1041. Be Unique (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789189.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  4. PAT甲题题解-1050. String Subtraction (20)-水题

    #include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...

  5. PAT甲题题解-1096. Consecutive Factors(20)-(枚举)

    题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子.给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列. 比如一个数可 ...

  6. PAT甲题题解-1108. Finding Average (20)-字符串处理

    求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的. 这里我写了函数来判断是否符合题目要求的数字,有点麻烦. #include <iostream> #include < ...

  7. PAT甲题题解-1120. Friend Numbers (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. PAT甲题题解-1015. Reversible Primes (20)-素数

    先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...

  9. PAT甲题题解-1046. Shortest Distance (20)-做了一个假的最短路,水

    一开始以为是最短路,结果是给你一个环,让你求环上两点之间的距离...那还做毛线 然而还是得做毛线 #include <iostream> #include <cstdio> # ...

随机推荐

  1. 阿里八八Alpha阶段Scrum(8/12)

    今日进度 叶文滔: 已经成功解决兼容性问题,目前正在嵌入多级按钮API,预计明天可以完成 王国超: 今天终于debug了,被卡了几天的fragment嵌套listview终于成功了 俞鋆: 研究了一下 ...

  2. Terminal Service 终端链接

    2008 64位前有这项服务,之后就与远程管理合并了 如果要设置他的连接数可以去 桌面 --> 管理工具 --> 远程桌面服务 最大数设置成1个好了

  3. BZOJ 1087 互不侵犯King 状态压缩DP

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1087 题目大意; 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国 ...

  4. Redis系列二:reids介绍

    一.什么是redis.redis有哪些特性.redis有哪些应用场景.redis的版本 1. 什么是redis redis是一种基于键值对(key-value)数据库,其中value可以为string ...

  5. java 计算百分数方法

    俗话说好记性不如烂笔头,故记之. DecimalFormat decimalFormat = new DecimalFormat("##.00%"); System.out.pri ...

  6. PHPer是草根吗

    以下文字并没有非常多的技术词汇,所以只要对PHP感兴趣的人都可以看看. PHPer是草根吗? 从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务.同时,作为针对Web开发量身定制的脚本 ...

  7. JDK1.8源码分析之HashMap

    一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...

  8. 使用 zTree 右键菜单功能的总结

     一: 首先什么是zTree? zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点.专门适合项目开发,尤其是 树状菜单.树状 ...

  9. 支持-webkit-前缀的浏览器修改滚动条样式

    //血槽宽度 ::-webkit-scrollbar { width:8px; height:8px; } //拖动条 ::-webkit-scrollbar-thumb { background-c ...

  10. Java 将任意数组的任意两个位置的数据进行交换

    package yw.fanxing; /** * 自定义泛型测试 * * 写一个方法,将任意数组的任意两个位置的数据进行交换 * * @author yw-tony * */ public clas ...