【1081】Rational Sum (20 分)

举报
野猪佩奇996 发表于 2022/01/23 01:47:31 2022/01/23
【摘要】 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#inclu...

  
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #include<string.h>
  6. #include<algorithm>
  7. #include<map>
  8. #include<vector>
  9. #include<queue>
  10. using namespace std;
  11. typedef long long ll; //记ll为long long
  12. ll gcd(ll a,ll b){ //求a与b的最大公约数
  13. return b==0?a:gcd(b,a%b);
  14. }
  15. struct Fraction{ //分数
  16. ll up,down; //分子,分母
  17. };
  18. Fraction reduction(Fraction result){ //化简
  19. if(result.down <0) { //分母为负数,令分子和分母都变为相反数
  20. result.up=-result.up;
  21. result.down=-result.down;
  22. }
  23. if(result.up == 0){ //如果分子为0
  24. result.down=1; //令分母为1
  25. }else{ //如果分子不为0,进行约分
  26. int d=gcd(abs(result.up) , abs(result.down)); //分子分母的最大公约数
  27. result.up /= d; //约去最大公约数
  28. result.down /= d;
  29. }
  30. return result;
  31. }
  32. Fraction add(Fraction f1,Fraction f2){ //分数f1加上分数f2
  33. Fraction result;
  34. result.up=f1.up*f2.down+f2.up*f1.down; //分数和的分子
  35. result.down=f1.down *f2.down; //分数和的分母
  36. return reduction(result); //返回结果分数,注意化简
  37. }
  38. void showResult(Fraction r){ //输出分数r
  39. reduction(r);
  40. if(r.down == 1) printf("%lld",r.up); //整数
  41. else if(abs(r.up) > r.down){ //假分数
  42. printf("%lld %lld/%lld\n",r.up / r.down, abs(r.up)%r.down , r.down);
  43. }else{ //真分数
  44. printf("%lld/%lld\n",r.up,r.down);
  45. }
  46. }
  47. int main(){
  48. int n; //分数个数
  49. scanf("%d",&n); //分数个数
  50. Fraction sum,temp;
  51. sum.up=0;sum.down=1 ;//初值:和的分子为0,分母为1!!!
  52. for(int i=0;i<n;i++){
  53. scanf("%lld/%lld",&temp.up,&temp.down);
  54. sum=add(sum,temp); //sum增加temp
  55. }
  56. showResult(sum); //输出结果
  57. system("pause");
  58. return 0;
  59. }

 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/99355395

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。