啊啊啊 把函数参数也改成longlong以后终于过了一个样例 拿了18/20分 还有两分到底在哪啊。。
注意scanf的格式读入
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int N=110;
typedef long long ll;
ll gcd(int a,int b){
return b ? gcd(b,a%b) : a;
}
ll lcm(int a,int b){
return a*b/gcd(a,b);
}
ll a[N],b[N];
int main(){
int n;
cin>>n;
if(n==0) {
cout<<"0";
return 0;
}
ll t=0;
for(int i=0;i<n;i++){
scanf("%lld/%lld",&a[i],&b[i]);
// cout<<"a[i]="<<a[i]<<endl;
if(t==0) t = b[i];
else t = lcm(b[i],t);//最终的t为所有分母的最小公倍数
}
// cout<<"t="<<t<<endl;
ll s=0;
for(int i=0;i<n;i++){
ll k=t/b[i];
// cout<<"k="<<k<<endl;
s+=a[i]*k;
// cout<<"s="<<s<<endl;
}
bool prime=0;
if((s/t)!=0) {
cout<<s/t;
prime=1;
}
s-=t*(s/t);
ll k=gcd(s,t);
s/=k;
t/=k;
if(s==0) return 0;
if(prime==1) cout<<' ';
cout<<s<<"/"<<t;
return 0;
}