1、求两个数最大公约数
方法一:辗转相除法
思路:两个数,用较大的数除以较小的数,所得余数与较小的数记为新的两个数,再重复之前的过程,直到余数为0,这时较大的数就是最大公约数。
完整程序
#include<stdio.h>
int main()
{
int m,n,r;
scanf("%d,%d",&m,&n);
do
{
r=m%n;
m=n;
n=r;
}
while(n);
printf("greatest common divisor is%d\n",m);
return 0;
}
封装函数
int gcd(int m,int n)
{
do
{
r=m%n;
m=n;
n=r;
}
while(n);
return m;
}
调用函数
#include<stdio.h>
int main()
{
int m,n,r;
int gcd(int m,int n);
scanf("%d,%d",&m,&n);
gcd(int m,int n);
printf("greatest common divisor is%d\n",m);
return 0;
}
递归函数调用
#include<stdio.h>
int main()
{
int m,n;
scanf("%d,%d",&m,&n);
int gcd(int x,int y);
printf("greatest common divisor is%d\n",gcd(m,n));
}
int gcd(int x,int y)
{
if(y==0) return x;
else return(gcd(y,x%y));
}
方法二:更相减损法
思路:两个数,用较大的数减去较小的数,所得差与较小的数记为新的两个数,再重复之前
的过程,直到两个数相等,这时这两个数就是最大公约数。
完整程序
#include<stdio.h>
int main()
{
int m,n;
scanf("%d,%d",&m,&n);
while(m!=n)
{
if(m>n) m-=n;
else n-=m;
}
printf("greatest common divisor is%d\n",m);
return 0;
}
封装函数
int gcd(int m,int n)
{
while(m!=n)
{
if(m>n) m-=n;
else n-=m;
}
return m;
}
调用函数
#include<stdio.h>
int main()
{
int m,n,r;
int gcd(int m,int n);
scanf("%d,%d",&m,&n);
printf("greatest common divisor is%d\n",gcd(m,n));
return 0;
}