问题:
构造一个分数结构体,包括分子和分母,主函数要求用此结构体实现分数相加并化简,在屏幕上显示结果。
#include <stdio.h>
#include <malloc.h>
struct fenshu
{
int a;
int b;
};
int gcd(int a,int b)
{
while(b!=0)
{
int t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{
int n,i;
struct fenshu *p;
while(scanf("%d",&n)!=EOF)
{
int k;
int kk;
int fenzi=0,fenmu=1,fenmu1;
p=(struct fenshu*)malloc(sizeof(struct fenshu)*n);
for(i=0;i<n;i++)
{
scanf("%d%d",&p[i].a,&p[i].b);
}
for(i=0;i<n-1;i++)
{
fenmu*=p[i].b; //求前N-1个分母
}
fenmu1=p[i].b;
k=gcd(fenmu,fenmu1);
// printf("%d %d %d\n",k,fenmu,fenmu1);
kk=k*(fenmu/k)*(fenmu1/k);
// printf("%d\n",kk);
for(i=0;i<n;i++) //分子通分后相加
{
fenzi+=kk*(p[i].a)/(p[i].b);
}
//printf("%d %d\n",fenzi,kk);
k=gcd(fenzi,fenmu);//求得最大公约数
//kk=k*(fenzi/k)*(fenmu/k);
//printf("%d\n",k);
printf("几个分数相加之和为:%d/%d\n",fenzi/k,kk/k);
free(p);
}
}