您的位置:首页 > 其它

习题 5.3 输入两个正整数m和n,求其最大公约数和最小公倍数。

2017-08-08 10:11 645 查看

C程序设计 (第四版) 谭浩强 习题5.3 个人设计

习题 5.3 输入两个正整数m和n,求其最大公约数和最小公倍数。

代码块

最大公约数与最小公倍数的乘积是两个数的乘积。

方法1:(利用while循环结构和欧几里得算法)

#include <stdio.h>
int main()
{
int m, n, a, b, r, g;
//输入正整数m和n
printf("Please enter m & n: ");
scanf("%d %d", &m, &n);
a = m;
b = n;
r = m % n;
while (r != 0){
m = n;
n = r;
r = m % n;
}
g = a * b / n;
printf("HCF=%d\n", n);  //最大公约数
printf("LCM=%d\n", g);  //最小公倍数
return 0;
}


方法2:(利用for循环结构和短除算法)

#include <stdio.h>
int main()
{
int m, n;
//输入正整数m和n
printf("Please enter m & n: ");
scanf("%d %d", &m, &n);
//短除法判断
for (int i=2, s=1, x=m, y=n; i<=m && i<=n;)
!(m%i) && !(n%i) ? s*=i, m/=i, n/=i, i=2 : i++;
printf("HCF=%d\n", s);                    //输出最大公约数
printf("LCM=%d\n", x*y/s);                //输出最小公倍数
return 0;
}


方法3:(利用函数的模块化设计)

#include <stdio.h>
void input();                              //定义输入函数
int HCF(int x, int y);                     //定义最大公约数函数
int LCM(int x, int y);                     //定义最小公倍数函数
int m, n;
b6f7
//定义全局变量
int main()
{
input();                               //调用输入函数
printf("HCF=%d\n", HCF(m, n));         //输出最大公约数
printf("LCM=%d\n", LCM(m, n));         //输出最小公倍数
return 0;
}
//输入函数
void input()
{
printf("Please enter m & n: ");
scanf("%d %d", &m, &n);
}
//最大公约数函数
int HCF(int x, int y)
{
for (int i=2, s=1; i<=x && i<=y;)
!(x%i) && !(y%i) ? s*=i, x/=i, y/=i, i=2 : i++;
return s;
}
//最小公倍数函数
int LCM(int x, int y)
{
return x*y/HCF(x, y);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐