最大公因数和最大公倍数解法
/*
作 者:秋问
时 间:2020-12-11
问题描述:通过自定义函数求解最大公因数和最大公倍数
解法解析:看注释
郑重声明:点个关注点个赞呗 ^_^
编 外:多点鼓励,才会快乐多多,动力多多
*/
一:惯用思维
1 #include "stdio.h" 2 //最大公倍数 3 int fun1(int m,int n){ 4 int min=m>n?n:m; //取两者之间小者 5 for(int i=min;i>=1;i--){ //从后面开始 6 if(m%i==0&&n%i==0){ //能被整除,即余0,得最大公因数 7 return m*n/i; //相乘得最大公倍数 8 } 9 } 10 } 11 //最大公因数 12 int fun2(int m,int n){ 13 int min=m>n?n:m; 14 for(int i=min;i>=1;i--){ 15 if(m%i==0&&n%i==0){ //类似最大公倍数的注释 16 return i; 17 } 18 } 19 } 20 main(){ 21 int m,n; 22 scanf("%d %d",&m,&n); 23 //函数调用 24 int x=fun1(m,n); 25 int y=fun2(m,n); 26 printf("%d %d\n",y,x); 27 return 0; 28 } 29
二、辗转相除法--递归和非递归
1 #include "stdio.h" 2 int main(){ 3 int fun1(int ,int ); //函数声明 4 int fun2(int ,int ); 5 int fun3(int ,int ); 6 int m,n; 7 scanf("%d %d",&m,&n); 8 printf("%d %d %d\n",fun1(m,n),fun2(m,n),fun3(m,n)); //函数调用 9 return 0; 10 } 11 //最大公因数 12 int fun1(int m,int n){ 13 return n==0?m:fun1(n,m%n); //递归 14 //m n 15 //4 5 16 //5 4 17 //4 1 18 //1 0 19 } 20 //最大公倍数 21 int fun2(int m,int n){ 22 return m*n/fun1(m,n); //需要调用fun1,当fun1不存在时会出错 23 } 24 //最大公倍数 25 int fun3(int m,int n){ //能够保证自身独立性 26 int x=m,y=n; 27 while(y){ 28 int tmp=x%y; //消减值 29 //换位 30 x=y; 31 y=tmp; 32 } 33 return m*n/x; 34 }

浙公网安备 33010602011771号