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;
}
标签:return,gcd,测试点,ll,个数,long,L1,009,lld
From: https://www.cnblogs.com/chengyiyuki/p/18059540