PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算
输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式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)-模拟分数计算的更多相关文章
- PAT甲题题解-1081. Rational Sum (20)-模拟分数计算
模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...
- PAT甲题题解-1042. Shuffling Machine (20)-模拟
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1041. Be Unique (20)-水题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789189.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1050. String Subtraction (20)-水题
#include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...
- PAT甲题题解-1096. Consecutive Factors(20)-(枚举)
题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子.给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列. 比如一个数可 ...
- PAT甲题题解-1108. Finding Average (20)-字符串处理
求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的. 这里我写了函数来判断是否符合题目要求的数字,有点麻烦. #include <iostream> #include < ...
- PAT甲题题解-1120. Friend Numbers (20)-水题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1015. Reversible Primes (20)-素数
先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...
- PAT甲题题解-1046. Shortest Distance (20)-做了一个假的最短路,水
一开始以为是最短路,结果是给你一个环,让你求环上两点之间的距离...那还做毛线 然而还是得做毛线 #include <iostream> #include <cstdio> # ...
随机推荐
- JAVA随机数之多种方法从给定范围内随机N个不重复数
一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j ...
- 详解Web请求中的DNS域名解析
当我们打开浏览器,输入一个URL去请求我们需要的资源,但是URL是需要解析成对应的IP地址才能与远程主机建立连接,如何将URL解析成IP就是DNS的工作范畴,即使作为开发人员,这个过程我们也感觉不到, ...
- CentOs7 编译安装PHP7.1.5
1 创建php用户和用户组,并在github下载php7源码 #######新建php用户和php组 [root@typecodes ~]# groupadd -r www && us ...
- mysql主从复制亲测,以及注意事项
本人亲测,windows作为mysql主服务器,linux作为从服务器,使用两个linux配置步骤都一样,测一遍而已:区别配置文件在于windwos是my.ini.linux在/etc/my.cof ...
- JS动态生成表格后 合并单元格
JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...
- 贪心算法——字典序最小问题,Saruman‘s Army
题目描述 Best Cow Line (POJ 3617) 给定长度为N的字符串S,要构造一个长度为N字符串T.T是一个空串,反复执行下列任意操作: 从S的头部删除一个字符,加到T的尾部: 从S的尾部 ...
- abp 嵌入资源(视图、css、js)的访问
最近在做的基于abp作为框架的一个项目,将一些属于框架功能的页面写在了一个独立程序集中,然后在web项目中引用该程序集达到访问框架页面目的. 这样一来发布web之后,在发布目录中是看不到写在另一个程序 ...
- Tomcat端口被占用解决方案
Tomcat端口被占用解决方法 1.在dos下,输入 netstat -ano|findstr 8080 //说明:查看占用8080端口的进程,显示占用端口的进程 2.taskkill /pid 19 ...
- 20155202张旭 Exp7 网络欺诈技术防范
20155202张旭 Exp7 网络欺诈技术防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充域名服务器,来发送伪造 ...
- 20155235 《网络攻防》 实验五 MSF基础应用
20155235 <网络攻防> 实验五 MSF基础应用 实验内容 一个主动攻击实践,如ms08_067; (1分) 一个针对浏览器的攻击,如ms11_050:(1分) 一个针对客户端的攻击 ...