针对有条件可能未考虑造成答案部分正确问题
代码
#include <stdio.h>
#include <math.h>
//函数求最大公因数
int m(int x,int y)
{
int a=fmax(x,y);
int b=fmin(x,y);
int mid;
while(b!=0)
{
mid=a%b;
a=b;
b=mid;
}
return a;
}
int main()
{
int n,i,sum=0;
int a,b;
scanf("%d",&n);
for(i=0; i<n; i++)
{
int a1,b1;
scanf("%d/%d",&a1,&b1);
sum+=a1/b1;
//提取整形
a1=a1%b1;
//提出分子
if(i==0)
//初始化
{
a=a1;
b=b1;
}
else
{
int mid=m(b,b1);
int ret=(b*b1)/mid;
a=a*(ret/b)+a1*(ret/b1);
b=ret;
sum+=a/b;
a=a%b;
}
}
int z=m(a,b);
a/=z;
b/=z;
//分子分母最简化
//下列是防止出现输出整形和分数表达式异号
if(a<0&&sum>0)
{
sum-=1;
a=a+b;
}
if(a>0&&sum<0)
{
sum+=1;
a=-(b-a);
}
if(sum==0)
{ if(a==0)
{
printf("\n");
}
else
{
printf("%d/%d\n",a,b);
}
}
else
{
printf("%d",sum);
if(a==0)
{
printf("\n");
}
else
{
printf(" %d/%d\n",a,b);
}
}
return 0;
}