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 }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/16153970.html