博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分数(有理数)的四则运算PAT1088
阅读量:5916 次
发布时间:2019-06-19

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

hot3.png

2015-02-05

PAT- B1088. Rational Arithmetic (20)

1 #include 
2 #include
3 using namespace std; 4 typedef long long LL; 5 typedef struct Fraction{ 6 LL up,down; 7 }; 8 LL gcd(LL a,LL b){ 9 return b==0 ? a : gcd(b,a%b); 10 } 11 Fraction reduction(Fraction res){ 12 if(res.down<0){ 13 res.down=-res.down; 14 res.up=-res.up; 15 } 16 else if(res.up==0) 17 res.down==1; 18 else{ 19 LL d=gcd(abs(res.up),res.down); 20 res.up/=d; 21 res.down/=d; 22 } 23 return res; 24 } 25 Fraction add(Fraction a,Fraction b){ 26 Fraction res; 27 res.up=a.up*b.down+a.down*b.up; 28 res.down=a.down*b.down; 29 return reduction(res); 30 } 31 Fraction sub(Fraction a,Fraction b){ 32 Fraction res; 33 res.up=a.up*b.down-a.down*b.up; 34 res.down=a.down*b.down; 35 return reduction(res); 36 } 37 Fraction multi(Fraction a,Fraction b){ 38 Fraction res; 39 res.up=a.up*b.up; 40 res.down=a.down*b.down; 41 return reduction(res); 42 } 43 Fraction divide(Fraction a,Fraction b){ 44 Fraction res; 45 res.up=a.up*b.down; 46 res.down=a.down*b.up; 47 return reduction(res); 48 } 49 void showFraction(Fraction res){ 50 res=reduction(res); 51 if(res.up<0) 52 printf("("); 53 if(res.down==1) 54 printf("%lld",res.up); 55 else if(res.up==0) 56 printf("0"); 57 else if(abs(res.up)>res.down){ 58 printf("%lld %lld/%lld",res.up/res.down,abs(res.up)%res.down,res.down); 59 } 60 else{ 61 printf("%lld/%lld",res.up,res.down); 62 } 63 if(res.up<0) 64 printf(")"); 65 } 66 void output(Fraction a,Fraction b,char ch){ 67 showFraction(a); 68 printf(" %c ",ch); 69 showFraction(b); 70 printf(" = "); 71 switch(ch){ 72 case '+': 73 showFraction(add(a,b)); 74 break; 75 case '-': 76 showFraction(sub(a,b)); 77 break; 78 case '*': 79 showFraction(multi(a,b)); 80 break; 81 case '/': 82 if(b.up==0) 83 printf("Inf"); 84 else 85 showFraction(divide(a,b)); 86 break; 87 default: 88 printf("error"); 89 break; 90 } 91 printf("\n"); 92 } 93 int main() 94 { 95 Fraction a,b,ans; 96 while(scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down)!=EOF){ 97 a=reduction(a); 98 b=reduction(b); 99 output(a,b,'+');100 output(a,b,'-');101 output(a,b,'*');102 output(a,b,'/');103 }104 return 0;105 }

 

转载于:https://my.oschina.net/Jerrymingzj/blog/803828

你可能感兴趣的文章
linux硬链接与软链接
查看>>
回头再说:jQuery跨域原理
查看>>
【zepto学习笔记03】事件机制
查看>>
部分 I. Office network
查看>>
【Android】中兴ZTE sdcard路径的问题
查看>>
Shell编程之数组使用
查看>>
8.3. 搜索
查看>>
OK335xS 系统启动配置解析
查看>>
第 1 章 DB-Engines - DB-Engines Ranking
查看>>
【IntelliJ Idea】idea快速创建maven spring项目
查看>>
Nancy总结(三)Nancy资料介绍
查看>>
第 172 章 TRAC
查看>>
76.5. Attic - 拥有重复数据删除技术的备份软件
查看>>
MPLS LDP随堂笔记1
查看>>
软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
查看>>
写在最前面 - 每天5分钟玩转容器技术(1)
查看>>
谈谈一些有趣的CSS题目(七)-- 消失的边界线问题
查看>>
睡眠不好
查看>>
159.3. salt 命令
查看>>
UWP 统一平台开发介绍
查看>>