#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long gcd(long long a,long long b){
return b==0?abs(a):gcd(b,a%b);
}
int main() {
long long n,a,b,suma = 0, sumb = 1, gcdvalue;
cin>>n;
for(int i=0;i<n;i++){ //分数相加
scanf("%lld/%lld",&a,&b);
gcdvalue=gcd(a,b); //输入后分子分母先约分
a=a/gcdvalue;
b=b/gcdvalue;
suma=a*sumb+suma*b; //和之前的累计和suma/sumb进行通分相加
sumb=b*sumb;
gcdvalue=gcd(suma,sumb); //再将累计和通分
suma=suma/gcdvalue;
sumb=sumb/gcdvalue;
}
long long integer=suma/sumb; //真分数形式输出
suma=suma-integer*sumb;
if(integer!=0){
cout<<integer;
if(suma!=0){
cout<<" ";
}
}
if(suma!=0) cout<<suma<<"/"<<sumb;
if(suma==0&&integer==0)cout<<0;
system("pause");
return 0;
}
1081 Rational Sum (20 分) 分数相加通分
于 2022-02-13 12:19:54 首次发布