参考代码:

#include<stdio.h>
int funY(int a,int b){          //最大公约数
	int min = (a < b ? a : b);
	while (1) {
		if (a % min == 0 && b % min == 0) {
			break;
		}
		min--;
	}
	return min;
}
int funB(int y1,int y2){        //最小公倍数
	int i = y1<y2?y1:y2;
	while(i){
		if(i%y1==0&&i%y2==0){
			break;
		}
		i++;
	}
//	printf("最小公倍数:%d\n",i);
	return i;
}
void Sum(int x,int y,int *sumx,int *sumy){                 //求和
//	printf("x = %d y = %d\n",*sumx,*sumy);
	if((*sumx)==0&&(*sumy)==0){               
		(*sumx)+=x;
		(*sumy)+=y;
//		printf("---------------\n");
	}else{
		if((*sumy)!=y){                            //通分
			int t = funB((*sumy),y);           //求出最小公倍数
			x = t/y*x;
			(*sumx) = t/(*sumy)*(*sumx);
			(*sumx)+=x;
			*sumy = t;
		}else{ 
			(*sumx)+=x;
		}
	}
//	printf("x = %d y = %d\n",*sumx,*sumy);
}
int main()
{
	int n,x,y,sumx = 0,sumy = 0;
	char c;
	scanf("%d",&n);
	while(n){
		scanf("%d%c%d",&x,&c,&y);
		Sum(x,y,&sumx,&sumy);                //循环,将输入的值累加
		n--;
	}
	int t = funY(sumx,sumy);
	sumx = sumx / t;
	sumy = sumy / t;
	if(sumy == 1){
		printf("%d",sumx);
	}else{
		printf("%d/%d",sumx,sumy);
	}
	return 0;
}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论