问题描述:从键盘输入两个整数,定义函数求最大公约数和最小公倍数,主函数中输出两个数的最大公约数和最小公倍数,函数声明如下:int acd1(int m,int n);。
输入格式:从键盘输入两个整数,用逗号隔开
输出格式:主函数中输出最大公约数和最小公倍数。
输入样例1:
27,15
输出样例1:(逗号为英文状态)
acd=3,amd=135
输入样例2:
30,6
输出样例2:
acd=6,amd=30
主函数程序如下,注意主函数程序有错误,请修改:
#include "stdio.h"
int main(){
int x,y,acd,amd;/*定义变量,acd保存最大公约数,amd保存最小公倍数*/
scanf("%d,%d",x,y);(错误1)
acd=acd(int m1,int m2);/*调用函数求最大公约数*/ (错误2)
amd=(x*y)/acd;/*求最小公倍数*/
printf("acd=%d,amd=%d",acd,amc);
return 0;
}
方法:辗转相除法(欧几里德算法):
最大公约数:通过连续取两数中较小数对较大数取余的方式,直到余数为0,此时较大数即为最大公约数。
最小公倍数:使用两数乘积除以它们的最大公约数即可得到最小公倍数。
正确程序: