分数化简要化简到最简形式,比如12/20可以化简成6/10和3/5,但3/5是最简形式,不要求将假分数(如7/2)化简成带分数(3)形式。先从键盘输入两个整数m和n(1<=m,n<=10000) ,其中m表示分子,n表示分母。然后输出分数化简后的最简形式。
#include <stdio.h>
#include <math.h>
int Gcd(int a, int b);
int main()
{
int m,n;
printf("Input m,n:");
scanf("%d,%d",&m,&n);
if(1<=m&&n<=10000&&n!=0)
{
m=m/Gcd(m,n);
n=n/Gcd(m,n);
printf("%d/%d\n",m,n);
}
else
printf( "Input error!\n");
return 0;
}
int Gcd(int a, int b)
{
int i=0,max;
if (abs(a)>abs(b))
{
max=abs(a);
}
else max=abs(b);
for(i=max;i>0;i--)
{
if(abs(a)%i==0&&abs(b)%i==0)
{
break;
}
}
return i;
}
当输入210,35的时候输出了6,35。应该输出6,1才对,输入其他的几组数字倒没有问题。
参考GPT和自己的思路:
经分析,代码中的问题出在分子(m)和分母(n)简化时的公因数并没有被正确计算,导致最终输出的分数并不是最简形式。
正确的代码应该是:
#include <stdio.h>
#include <math.h>
int Gcd(int a, int b);
int main()
{
int m,n;
printf("Input m,n:");
scanf("%d,%d",&m,&n);
if (m>=1 && n>=1 && m<=10000 && n<=10000 && n!=0)
{
int common_factor = Gcd(m, n);
m /= common_factor;
n /= common_factor;
printf("%d/%d\n",m,n);
}
else
printf("Input error!\n");
return 0;
}
int Gcd(int a, int b)
{
if (a == 0)
return b;
return Gcd(b % a, a);
}
主要改动点: