L1-009 N个数求和

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;
}
posted @ 2024-03-07 18:55  YuKiCheng  阅读(49)  评论(0编辑  收藏  举报