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

来源:互联网 发布:2016中国象棋软件排名 编辑:程序博客网 时间:2024/06/12 21:58

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;                                  //定义全局变量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);}
阅读全文
0 1
原创粉丝点击