C语言中约分成最简分数
基础算法
#include<stdio.h>
int main()
{
int a, b;
int i=0;
scanf("%d/%d", &a, &b);
do
{
i++;
if(a%i==0&&b%i==0)
{
a=a/i;
b=b/i;
i=1;
}
}while(i<b);
printf("%d/%d",a,b);
return 0;
}
辗转相除法(欧几里德算法)
以下两种方法原理相同,只是部分写法不同(均为C语言)
方法一
#include<stdio.h>
int Gcd(int m,int n)
{
if(n==0)
return m;
return Gcd(n,m%n);
}
int main()
{
int a, b;
scanf("%d/%d", &a, &b);
printf("%d/%d",a/Gcd(a,b),b/Gcd(a,b));
}
方法二
#include<stdio.h>
int gcd(int a,int c)
{
while(c!=0)
{
int t=a%c;
a=c;
c=t;
}
return a;
}
int main()
{
int m, n;
scanf("%d/%d", &m, &n);
printf("%d/%d", m/ gcd(m,n),n / gcd(m,n));
}