C语言程序关于分数相乘中的问题。

以下是我的程序:
只有分子分母相同或结果可以约分为整数时才能输出正确结果。

#include<stdio.h>
int main()
{
int n,a,b,i=0,j,k,x,y,z;
scanf("%d",&n); //有n个分数要相乘
x=1;
y=1;
while(i<n)
{
scanf("%d%d",&a,&b);
x=x*a; //分子累乘
y=y*b; //分母累乘
i++;
}
if(x%y==0) //约分为整数或1时的情况
{ z=x/y;
printf("%d\n",z);
return 0;
}
if((x<y)&&(x%y!=0)) //真分数求最大公约数并约分
{
for(j=x;j>=2;j--)
{
if((x%j==0)&&(y%j==0)) //加分数求最大公约数并约分 x=x/j;
x=x/j;
y=y/j;
printf("%d/%d\n",x,y);
return 0;
}
}
if((x>y)&&(x%y!=0))
{
for(k=y;k>=2;k--)
{
if((x%k==0)&&(y%k==0))
x=x/k;
y=y/k;
printf("%d/%d\n",x,y);
return 0;
}
}
}

O(∩_∩)O谢谢O(∩_∩)O谢谢!!
最新回答
一枕庭前雪

2025-06-21 07:24:19

#include<stdio.h>
int main()
{
int n,a,b,i=0,j,k,x,y,z;
scanf("%d",&n); //有n个分数要相乘
x=1;
y=1;
while(i<n)
{
scanf("%d%d",&a,&b);
x=x*a; //分子累乘
y=y*b; //分母累乘
i++;
}
if(x%y==0) //约分为整数或1时的情况
{ z=x/y;
printf("%d\n",z);
return 0;
}
if((x<y)&&(x%y!=0)) //真分数求最大公约数并约分
{
for(j=x;j>=2;j--) //!!如果不可约分则无结果,改为for(j=x;j>=1;j--)
{
if((x%j==0)&&(y%j==0)) //加分数求最大公约数并约分 x=x/j;
x=x/j;
y=y/j;
printf("%d/%d\n",x,y);
return 0;
}
}
if((x>y)&&(x%y!=0))
{
for(k=y;k>=2;k--)//!!同理改为for(k=y;k>=1;k--)
{
if((x%k==0)&&(y%k==0))
x=x/k;
y=y/k;
printf("%d/%d\n",x,y);
return 0;
}
}
}