1081 Rational Sum

匿名 (未验证) 提交于 2019-12-02 23:00:14
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/A7_RIPPER/article/details/84791542

题目大意:

计算n个分数的总和,输出形式为:整数部分 分数部分。其中分数部分要最简形式。

解题思路;


代码如下:

#include<iostream> #include<cstdio> #include<fstream> #include<set> #include<cmath> #include<cstring> #include<string> #include<map> #include<vector> #include<iomanip> #include<cstdlib> #include<list> #include<queue> #include<stack> #include<algorithm> #define inf 0x3f3f3f3f #define MOD 1000000007 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define meminf(a) memset(a,inf,sizeof(a)) //vector ::iterator it; //set<int>::iterator iter; typedef long long ll; typedef unsigned long long ull; using namespace std; ll fun(ll a,ll b) {   //cout<<a<<' '<<b<<'*';   while(b)   {     ll t=b;     b=a%b;     a=t;   } //  cout<<a<<endl;   return a; } int main() {   ll numerator[110]={0},denominator[110]={0},n;   for(int i=0;i<110;i++)denominator[i]=1;   cin>>n;   for(int i=0;i<n;i++)   {     scanf("%lld/%lld",&numerator[i],&denominator[i]);   } //  sort(denominator,denominator+n);   ll bei=denominator[1]*denominator[0]/fun(max(denominator[1],denominator[0]),min(denominator[1],denominator[0]));//先得到前两个分母的最小公倍数   //cout<<bei<<endl;   for(int i=2;i<n;i++)   {     bei=denominator[i]*bei/fun(max(denominator[i],bei),min(denominator[i],bei));//依次   //  cout<<bei<<endl;递推得到所有分母的最小公倍数   }   ll sum=0;   for(int i=0;i<n;i++)   {     ll k=bei/denominator[i];//通分     sum+=k*numerator[i];//计算分子和     //cout<<sum<<'*'<<k*numerator[i]<<endl;   }   //cout<<sum<<' '<<bei<<endl;   ll inter=sum/bei,mmo=fabs(sum%bei);//取整数和余数部分   bool flag=false;//对于整数和分数部分存在0情况的标记   if(inter)   {     cout<<inter;     flag=true;   }   ll p=fun(max(mmo,bei),min(mmo,bei));   //p=fabs(p);   mmo=mmo/p;bei=bei/p;   if(mmo)   {     if(inter)cout<<' ';     cout<<mmo<<'/'<<bei;     flag=true;   }   if(!flag)cout<<0;   cout<<endl; //  std::ios::sync_with_stdio(false); //  cin.tie(0); //  freopen("test.txt","r",stdin); //  freopen("output.txt","w",stdout);  return 0; }  
文章来源: 1081 Rational Sum
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!