PAT1081Rational Sum

编程入门 行业动态 更新时间:2024-10-24 18:18:32

PAT1081Rational <a href=https://www.elefans.com/category/jswz/34/1761002.html style=Sum"/>

PAT1081Rational Sum

这道题只要知道最大公约数和最小公倍数的求法就可以做得出来,但是要考虑的输出细节比较繁琐,代码写的很丑啦,不过总算是全部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;}elsereturn 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);}elseprintf("\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;
}

更多推荐

PAT1081Rational Sum

本文发布于:2024-02-26 09:55:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1702099.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:PAT1081Rational   Sum

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!