pta L1-009n个数求和

题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805133597065216

这道题处理起来相当麻烦,但是实际上是个模拟题

我们拿到这道题该怎么处理呢?

首先,题目要求让我们进行分数运算的同时最后输出既约分数形式,如果有余数也输出余数;

那么就可以知道了,模拟分数相加运算即可;

回顾一下,分数是怎么相加运算的

 

 可以看到,对于分数相加,是前一个分数的分子乘后一个分数的分母+后一个分数的分子乘前一个分数的分母;

而对于分母来说,则是两分母相乘就可以了,同时,在运算的时候,保证既约直接分子分母上下同时除以最大公约数即可

另外,需要注意的是:

对于分子是0的情况,这个商直接是0就好了;

还有当分子大于分母,分子小于分母的处理情况,也在代码中已标出

同时,如果分子如果可以整除分母,直接输出两个数相除的结果就ok了

Talk is cheap. Show me the code.

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long fenzi,fenmu;
 4 int n;
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     cin>>n;
 9     char ch;
10     cin>>fenzi>>ch>>fenmu;//首先初始化分子分母 
11     if(n==1)//如果只有一个数,就确保它是既约分数即可 
12     {
13         long long dight=__gcd(fenzi,fenmu);//求最大公约数 
14         fenzi=fenzi/dight;
15         fenmu=fenmu/dight;
16     }
17     for(register int i=1;i<n;i++)
18     {
19         long long x,y;
20         char ch;
21         cin>>x>>ch>>y;
22         fenzi=fenzi*y+x*fenmu;//模拟运算 
23         fenmu=fenmu*y;
24         long long dight=__gcd(fenzi,fenmu);//约分 
25         fenzi=fenzi/dight;
26         fenmu=fenmu/dight;
27     }
28     if(fenzi%fenmu==0)//是0直接输出商 
29     {
30         cout<<fenzi/fenmu;
31     }
32     else
33     {
34         if(fenmu==0)//0除以任何数都为0 
35         cout<<0;
36         else if(fenzi/fenmu>=1)//有余数 
37         {
38             cout<<fenzi/fenmu<<" "<<fenzi%fenmu<<"/"<<fenmu;
39         }
40         else//没余数 
41         {
42             cout<<fenzi<<"/"<<fenmu;
43         }
44     }
45     return 0;
46 }

 

posted @ 2022-04-16 19:27  江上舟摇  阅读(26)  评论(0编辑  收藏  举报