团体程序设计天梯赛练习(20分题目)

L1-009 N个数求和

//细节比较烦人,注意0和负号的问题
#include<stdio.h>
#include<math.h>
#define A 100
int gcd(int x,int y){
	int t;
	if(x>y)
		t=x,x=y,y=t;
	for(t=x;t>0;t--)
		if(x%t==0&&y%t==0) return t;
}
int main(){
	int N,mo[A],de[A]; //mo为分子,de为分母 
	scanf("%d",&N);
	for(int i=0;i<N;i++)
	    scanf("%d/%d",&mo[i],&de[i]);
	int x=mo[0],y=de[0];
	for(int i=1;i<N;i++){
		x=x*de[i]+y*mo[i];
		y=y*de[i];  //分数加法法则 
		int num=gcd(abs(x),abs(y)); //num为x,y的最大公因数 
		if(num!=0) x/=num,y/=num; //对x,y约分 
	}
	if(y<0) x=-x,y=-y;
	if(x!=0&&x/y==0) printf("%d/%d",x,y);  //真分数 
	else if(x%y==0&&y!=0) printf("%d",x/y); //整数 
	else printf("%d %d/%d",x/y,x%y,y); //假分数 
	return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值