团体程序设计天梯赛-练习集(三)

L1-009 N个数求和 (20分)

https://pintia.cn/problem-sets/994805046380707840/problems/994805133597065216

第一次得17分,少考虑分子为负情况

if(sum2<0)
	{
		sum2*=-1;
		cout<<"-";
	}
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
	return b==0?a:gcd(b,a%b);
}
int main()
{
	int n;
	int i,j,k;
	ll a[101],b[101];
	ll c,d,sum1=1,sum2=0;
	cin>>n;
	for(i=0;i<n;i++){
	 scanf("%lld/%lld",&c,&d);
	 a[i]=c/gcd(c,d),b[i]=d/gcd(c,d);
	 sum1*=b[i];
    }
    if(n==1&&a[0]==0) return 0;
    for(i=0;i<n;i++)
    {
    	for(j=0;j<n;j++)
    	{
    		if(i!=j) a[i]*=b[j];
		}
		sum2+=a[i];
	}
	if(sum2==0) {
		cout<<0<<endl;
		return 0;
	}
	c=sum1,d=sum2;
	sum1=c/gcd(c,d);  //分母 
	sum2=d/gcd(c,d);  //分子
	if(sum2<0)
	{
		sum2*=-1;
		cout<<"-";
	}
	if(sum2>=sum1)
	{
		if(sum2%sum1==0) cout<<sum2/sum1<<endl;
		else cout<<sum2/sum1<<" "<<sum2%sum1<<"/"<<sum1<<endl; 
	 }
	 else cout<<sum2<<"/"<<sum1<<endl;
	 return 0; 
}

  

猜你喜欢

转载自www.cnblogs.com/jianqiao123/p/12098587.html