输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式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. Excel思考问题的方式

    Excel思考问题的方式 一.写需求,说我要什么数据 好比如,现在咱们需要将第一周.第二周.第三周.第四周.….等E:E列里的"每一周的 第二个数值"提取出来.那么我们手动提取了几 ...

  2. [ML学习笔记] 决策树与随机森林(Decision Tree&Random Forest)

    [ML学习笔记] 决策树与随机森林(Decision Tree&Random Forest) 决策树 决策树算法以树状结构表示数据分类的结果.每个决策点实现一个具有离散输出的测试函数,记为分支 ...

  3. Gitkraken的使用

    一个优秀的团队合作离不开git,一个优秀的程序员也离不开git.gitkraken是我在进行软工实践这门课接触到的git的UI界面的工具,它给我留下的印象就是非常好用和方便 怎么个方便法呢? 方便的安 ...

  4. saltstack二次开发(三)

    以下代码实现的功能: 通过saltstack的httpapi在minion上安装软件. vim saltapi.py #!/usr/bin/env python # -*- coding: utf-8 ...

  5. 【转】 python中 * 的用法

    转自:https://www.cnblogs.com/jony7/p/8035376.html 1.表示乘号 2.表示倍数,例如: def T(msg,time=1):    print((msg+' ...

  6. django表格form无法保存评论排查步骤

    初学django项目,在网上找了个blog教程,还是很不错的,这里感谢一下博主https://www.zmrenwu.com/post/2/ 这个项目适合django初学者,是一个完整的blog项目 ...

  7. WorldWind源码剖析系列:配置载入器类ConfigurationLoader

    配置载入器类ConfigurationLoader主要从指定的路径中加载保存星球相关参数的xml文件,从中读取数据来构造星球对象及其所关联的可渲染子对象列表并返回.该类的类图如下所示. 该类所包含的主 ...

  8. OpenCV——输入输出XML和YAML文件

  9. java操作数据库的事务支持

    一.需求背景: 我们生活经常遇到一个情况:在购买商品的时候,已经支付的了,那么商品应该处于已购买订单里.而不是付款之后,已购买商品没有. 还有转账的时候,转出方和转入方都需要扣减相应的金额,而不是一方 ...

  10. C++之内联函数

    C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展. 采用内联函数可以有效避免函数调用的开销,程序执行效 ...