博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算
阅读量:4597 次
发布时间:2019-06-09

本文共 3359 字,大约阅读时间需要 11 分钟。

输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出

如果为负数,则带分数两边要有括号
如果除数为0,则式子中的结果输出Inf
模拟题最好自己动手实现,考验细节处理,其它没啥好说的。

 

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

 

转载于:https://www.cnblogs.com/chenxiwenruo/p/6780891.html

你可能感兴趣的文章
iPad最值得期待的切实改进构想
查看>>
(转载)ERROR :“dereferencing pointer to incomplete type”是什么错误?
查看>>
jstack 堆栈日志分析
查看>>
Hystrix的一些应用和想法
查看>>
C#操作Word文件
查看>>
hihocoder1323 回文字符串
查看>>
MD5加密
查看>>
搜索评价指标——NDCG
查看>>
浅复制与深复制
查看>>
codeReview
查看>>
内存泄漏 tensorflow
查看>>
javascript 体验倒计时:距离国庆还有多长时间
查看>>
centos 7 修改ssh登录端口
查看>>
wraps
查看>>
11、深入理解计算机系统笔记:存储器层次结构,利用局部性
查看>>
小白整理一下PHP常用字符串函数
查看>>
一千行mysql笔记
查看>>
排查Java高CPU占用原因
查看>>
[iOS]数据库第三方框架FMDB详细讲解
查看>>
让IE6/IE7/IE8浏览器支持CSS3属性
查看>>