PAT 1088. Rational Arithmetic (20) 分数模拟计算+字符串处理
来源:互联网 发布:gt610疯牛病版 知乎 编辑:程序博客网 时间:2024/06/18 02:11
#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<string.h>#include<cmath>#include<string>using namespace std;///*************************题意:分数运算输出表达式时要为整数+分数形式*************************//************************求解要点:a1/a2 op b1/b2 =c1/c2首先要约分化简。约分通过计算最大公约数即 if(b%a==0)return a;elsereturn getgys(a,b-a) 来计算,同时b必须比a大然后同除计算时不拆出整数,直接用分子分母来运算同时注意处理符号和0的问题。************************//***********************笔记:*********************/#define M 100005#define INF 0xffffflong long getgys(long long a,long long b){long long t;if(a==0||b==0)return 1;if(a<0)a=a*(-1);if(b<0)b=b*(-1);if(a>b){t=a;a=b;b=t;}if(b%a==0)return a;elsereturn getgys(a,b-a);}void putnum(long long a1, long long a2){long long a3,a4,a5;int f=0;if(a1==0){printf("0");return ;}if(a2==0){printf("Inf");return ;}if(a1<0){printf("(");a1=(-1)*a1;printf("-");f=1;}a3=a1/a2;a4=a1%a2;if(a3!=0)printf("%lld",a3);if(a4!=0){if(a3!=0)cout<<" ";printf("%lld/%lld",a4,a2);}if(f)printf(")");}void deal(long long &a1,long long &a2){if(a2<0 && a1>=0){a1=(-1)*a1;a2=(-1)*a2;}else if(a1< 0 && a2<0){a1=(-1)*a1;a2=(-1)*a2;}}int main(){long long a1,a2,a3,a4,b1,b2,b3,b4;long long c1,c2,c3,c4,c5;long long gys;scanf("%lld/%lld",&a1,&a2);deal(a1,a2);gys=getgys(a1,a2);a1=a1/gys;a2=a2/gys;scanf("%lld/%lld",&b1,&b2);deal(b1,b2);gys=getgys(b1,b2);b1=b1/gys;b2=b2/gys;putnum(a1,a2);printf(" + ");putnum(b1,b2);printf(" = ");c1=a1*b2+a2*b1;c2=a2*b2;gys=getgys(c1,c2);c1=c1/gys;c2=c2/gys;putnum(c1,c2);cout<<endl;putnum(a1,a2);printf(" - ");putnum(b1,b2);printf(" = ");c1=a1*b2-a2*b1;c2=a2*b2;gys=getgys(c1,c2);c1=c1/gys;c2=c2/gys;putnum(c1,c2);cout<<endl;putnum(a1,a2);printf(" * ");putnum(b1,b2);printf(" = ");c1=a1*b1;c2=a2*b2;gys=getgys(c1,c2);c1=c1/gys;c2=c2/gys;putnum(c1,c2);cout<<endl;putnum(a1,a2);printf(" / ");putnum(b1,b2);printf(" = ");c1=a1*b2;c2=a2*b1;deal(c1,c2);gys=getgys(c1,c2);c1=c1/gys;c2=c2/gys;putnum(c1,c2);cout<<endl;return 0;}
阅读全文
0 0
- PAT 1088. Rational Arithmetic (20) 分数模拟计算+字符串处理
- 分数计算--PAT.A1081. Rational Arithmetic
- PAT (Advanced Level) 1088. Rational Arithmetic (20) 分数四则运算
- PAT 1088. Rational Arithmetic (20)(分数加减乘除)(待修改)
- PAT 1088 1088. Rational Arithmetic (模拟四则运算)
- PAT 1088. Rational Arithmetic (20)
- PAT 1088. Rational Arithmetic (20)
- 【PAT】1088. Rational Arithmetic (20)
- PAT 1088. Rational Arithmetic (20)
- PAT 1088. Rational Arithmetic
- 【PAT】1088. Rational Arithmetic
- PAT Rational Arithmetic (20)
- 1088. Rational Arithmetic (20) -- 公约数,字符串输出处理
- PAT A 1088. Rational Arithmetic (20)
- PAT-A 1088. Rational Arithmetic (20)
- PAT-A-1088. Rational Arithmetic (20)
- Pat(A) 1088. Rational Arithmetic (20)
- 【PAT】【Advanced Level】1088. Rational Arithmetic (20)
- Java中toString的使用
- libpng16.so.16,libjpeg.so.9 安装
- Scrapy-redis实现分布式爬取的过程与原理
- python入门笔记import方法区别
- tensorflow 命令集合
- PAT 1088. Rational Arithmetic (20) 分数模拟计算+字符串处理
- B. 在哈尔滨的寒风中
- R语言不平衡数据分类指南
- 一步一步的写出你自己的makefile文件
- 2017/12/08
- 695. Max Area of Island
- CMake+mingw-w64编译opencv-3.3.1
- 问题 O: 中庸之道(二)
- 广东工业大学自动化(自动控制原理)作者:Haven