题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880

这题注意一下各个函数的,处理,尤其是约分那部分,涉及的函数很多。

  1. 结构体
  2. 最大公约数gcd
  3. 约分函数
  4. 加法函数
  5. 显示函数

代码

  1. typedef long long ll;
  1. #include<algorithm>
  2. #include<iostream>
  3. #include<vector>
  4. using namespace std;
  5. struct Fraction{
  6. long long up, down;
  7. };
  8. long long gcd(long long a, long long b){
  9. if( b == 0 )return a;
  10. else return gcd(b, a % b);
  11. }
  12. Fraction reduction(Fraction a){
  13. if(a.down < 0) {
  14. a.up *= -1;
  15. a.down *= -1;
  16. }
  17. if(a.up == 0){
  18. a.down = 1;
  19. } else {
  20. int d = gcd(a.up, a.down);
  21. a.up /= d;
  22. a.down /= d;
  23. }
  24. return a;
  25. }
  26. Fraction add(Fraction a, Fraction b){
  27. Fraction temp;
  28. temp.up = a.up * b.down + a.down * b.up;
  29. temp.down = a.down * b.down;
  30. return reduction(temp);
  31. }
  32. void show_Fra(Fraction a){
  33. reduction(a);
  34. if(a.down == 1) printf("%lld",a.up);
  35. else if(abs(a.up) > a.down) printf("%lld %lld/%lld",a.up / a.down, a.up - a.down * (a.up / a.down), a.down);
  36. else printf("%lld/%lld",a.up, a.down);
  37. }
  38. int main(){
  39. int n;
  40. scanf("%d",&n);
  41. vector<Fraction> Fra_list(n);
  42. for(int i = 0; i < n; i++){
  43. scanf("%lld/%lld", &Fra_list[i].up, &Fra_list[i].down);
  44. }
  45. Fraction result;
  46. result.up = 0, result.down = 1;
  47. for(int i = 0; i < n; i++){
  48. result = add(result, Fra_list[i]);
  49. }
  50. show_Fra(result);
  51. return 0;
  52. }