
输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24zhuanzhanxiangchufa
解题心得:
还是那些前辈发明的算法好用些,这个辗转相除法不仅效率比我自己随手写的高,而且我自己开发的还有一些bug难以找到。
#include<stdio.h>
int gcd(int a,int b)
{
int t;
while(b){
t=a%b;
a=b;
b=t;
}
return a;
}
int main(){
int n;
scanf("%d",&n);
int up=0;
int down=0;
scanf("%d/%d",&up,&down);
for(int i=0;i<n-1;i++){
int tup=0;
int tdown=0;
scanf("%d/%d",&tup,&tdown);
int t=down*tdown;//通分
up=up*tdown+down*tup;
down=t;
int g=gcd(up,down);//约分
up/=g;
down/=g;
}
if(up<down&&-up<down&&up!=0){//分情况输出
printf("%d/%d",up,down);
}else if(down==1){
printf("%d",up);
}else{
printf("%d %d/%d",up/down,up%down,down);
}
return 0;
}
本文介绍了如何使用辗转相除法高效地计算分数的公约数,并展示了如何通过算法约分分数。博主分享了解题心得,强调了这种方法在算法中的优势和自身开发中的应用.
4747





