MD...提交过了好几次才通过。
第三个测试点: 需要使用long long,要求长整型。干脆就把int全部替换成long long。
第五个测试点: 随便试出来的,我输入了2 1/2 -1/2,发现啥都没打印出来。原来是忽略了结果是0的情况,如果整数部分和分子部分都是0,那么就把这个0打印出来,然后加了这部分,第五个就AC了。
可能还有个问题,如果结果只有整数的话,后面应该不带空格,不然会格式错误。有一次出了两个格式错误,应该是这个问题。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll gcd(ll a,ll b){if(!b) return a;return gcd(b,a%b);
}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;
}
int main(){ll a,b,c,d,n;ll zsp = 0;scanf("%lld",&n);scanf("%lld/%lld",&a,&b);for(ll i=1;i<n;i++){scanf("%lld/%lld",&c,&d);ll lc=lcm(b,d);ll fz=lc/b*a+lc/d*c;//分子和分母 ll fm=lc;if(fz/fm){zsp+=fz/fm;fz=fz%fm;}ll gc =gcd(fz,fm);a = fz/gc;b = fm/gc;}if(zsp==0&&a==0){cout << 0;}if(zsp){cout << zsp;if(a) {cout << " ";cout << a << "/" << b;}}else{if(a) cout << a << "/" << b;}return 0;
}