L1-009 N個數求和

YuKiCheng發表於2024-04-20
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
struct Fraction{
	ll fenzi,fenmu;
};
int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
} 
int lcm(int a,int b){
	return a/gcd(a,b)*b;
}
Fraction reduction(Fraction&a){
	if(a.fenmu<0){
		a.fenmu=-a.fenmu;
		a.fenzi=-a.fenzi;
	}
	if(a.fenzi==0) a.fenmu=1;//分子為0 
	else {
		//分子不是0 進行約分
		ll gy=abs(gcd(a.fenzi,a.fenmu));
		a.fenzi/=gy;
		a.fenmu/=gy; 
	}
	return a;
	
}
Fraction add(Fraction& a,Fraction&b){
	Fraction c;
    c.fenmu=a.fenmu*b.fenmu;
    c.fenzi=a.fenzi*b.fenmu+a.fenmu*b.fenzi;
    return reduction(c);
}
void print(Fraction &a){//分子為正負 分母是正 但是可能是假分式 
	if(a.fenmu==1) printf("%lld",a.fenzi);
	else if(abs(a.fenzi)>abs(a.fenmu))
	   printf("%lld %lld/%lld",a.fenzi/a.fenmu,abs(a.fenzi)%a.fenmu,a.fenmu);
	else printf("%lld/%lld",a.fenzi,a.fenmu);
}
int main(){
	int n;
	cin>>n;
	Fraction a;
	scanf("%lld/%lld",&a.fenzi,&a.fenmu);
	for(int i=1;i<n;i++){
		Fraction b;
		scanf("%lld/%lld",&b.fenzi,&b.fenmu);
		a=add(a,b);
	}
	print(a);
	return 0;
}

相關文章