PAT1081Rational Sum
来源:互联网 发布:英菲克看电视软件下载 编辑:程序博客网 时间:2024/05/05 11:59
这道题只要知道最大公约数和最小公倍数的求法就可以做得出来,但是要考虑的输出细节比较繁琐,代码写的很丑啦,不过总算是全部case通过了。
#include <iostream>#include <math.h>#include <stdio.h>using namespace std;struct rational{ int numerator; int denominator;};int gcd(int a,int b){ if (b==0) { return a; } else return gcd(b,a%b);}int lcm(int a,int b){ return a*b/gcd(a, b);}rational add(rational sum,rational next){ int l=lcm(sum.denominator, next.denominator); //开始通分并相加 sum.numerator=(l/sum.denominator)*sum.numerator; next.numerator=(l/next.denominator)*next.numerator; sum.numerator+=next.numerator; sum.denominator=l; //对结果进行约分 int g=gcd(sum.denominator, sum.numerator); sum.numerator/=g; sum.denominator/=g; return sum;}void output(rational sum){ int integ; if (sum.numerator==0) { printf("0\n"); return; } if (sum.numerator<0) { printf("-"); sum.numerator*=-1; } integ=sum.numerator/sum.denominator; if (integ!=0) { printf("%d",integ); sum.numerator=sum.numerator-integ*sum.denominator; } if (integ!=0&&sum.numerator!=0) { printf(" "); } if (sum.numerator!=0) { printf("%d/%d\n",sum.numerator,sum.denominator); } else printf("\n");}int main(){ int n; rational sum,next; // freopen("/Users/pantingting/Documents/code/data/input", "r", stdin); scanf("%d",&n); sum.denominator=1; sum.numerator=0; for (int i=0; i<n; i++) { scanf("%d/%d",&next.numerator,&next.denominator); sum=add(sum, next); } output(sum); return 0;}
0 0
- PAT1081Rational Sum
- Sum
- sum
- sum
- Sum
- Sum
- Sum
- sum
- Sum
- sum
- Sum
- sum
- Sum
- sum
- Sum Sum Sum
- HDU5150 Sum Sum Sum
- HDU - 5150 Sum Sum Sum
- hdu 5150 sum sum sum
- Linux多线程实践(1) --线程理论
- UML 工具 UMLet 试用
- DVB数字电视系统简介(DVB-C,DVB-S,DVB-T)
- 黑客
- Linux程序设计(Linux目录权限)
- PAT1081Rational Sum
- requestWindowFeature详解
- Shell文本处理 (1). bash命令杂项
- HDU 3449 Consumer
- pmp网站
- 成功领导力的10大关键
- Linux多线程实践(2) --线程基本API
- HDU 1269 迷宫城堡
- c语言字符数组一些启示