以下是我的程序:只有分子分母相同或结果可以约分为整数时才能输出正确结果。#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谢谢!!
#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; }}}