C语言程序设计(第三版)何钦铭著 习题4-7
题目
求最大公约数和最小公倍数。
输入两个正整数 m 和n(m≤1 000,n≤1 000),
求其最大公约数和最小公倍数。试编写相应程序。
分析过程
输入
条件:输入两个正整数 m 和n(m≤1 000,n≤1 000)
输出
条件:输出最大公约数和最小公倍数
分析
最大公约数=两数之积/最小公倍数,所以关键是求出最大公约数和最小公倍数中的一个
计算最大公约数的方法可以使用辗转相除法。
辗转相除法:
两整数a和b
a%b得余数c
若c=0,则b即为两数的最大公约数
若c≠0,则a=b,b=c,再回去执行
例如求35和15的最大公约数过程为:
35÷15 余5,,15÷5余0,5即为最大公约数
代码
#include <stdio.h>
#include <math.h>
int main () {
/*定义变量*/
int m,n; /*定义变量,存储输入的正整数m,n*/
int a,b; /*定义变量,辗转相除法中的两个数a,b*/
/*赋值*/
printf("请输入正整数m,n:\n"); /*输入提示*/
scanf("%d %d \n", &m, &n); /*输入并赋给变量*/
/*将m和n中较大的数赋值给a,较小的数赋值给b*/
if(m>n){
a=m;
b=n;
}else {
a=n;
b=m;
}
/*计算*/
int temp = a%b;/*求m%n的余数*/
while(temp){
/*若余数不为0,则将b的值赋给a,将a%b的余数赋值给b,继续进行运算;直至余数为0*/
a=b;
b=temp;
temp = a%b;
}
printf("%d %d\n",b,m*n/b);
return 0;
}