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

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

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

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

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。

 

代码块
方法1:使用while循环、欧几里得算法
#include <stdio.h>
#include <stdlib.h>

int main(){
    int m, n, a, b, r, g;
    //输入正整数m和n
    printf("Please enter m and 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);  //最小公倍数
    system("pause");
    return 0;
}
方法2:使用for循环、短除算法
#include <stdio.h>
#include <stdlib.h>

int main(){
	int m, n;
	//输入正整数m和n
	printf("Please enter m and 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);            //输出最小公倍数
	system("pause");
	return 0;
}
方法3:使用指针、函数的模块化设计
#include <stdio.h>
#include <stdlib.h>

int HCF(int *m, int *n){
	int x = *m;
	int y = *n;
	for(int mod = x % y; mod != 0; mod =  x % y){
		x = y;
		y = mod;
	}
	return y;
}

int LCM(int *m, int *n){
	return *m * (*n) / HCF(m, n);
}

int main(){
	int *m = (int*)malloc(sizeof(int));
	int *n = (int*)malloc(sizeof(int));
	
	printf("Enter m, n: ");
	scanf_s("%d %d", m, n);
	
	printf("HCF = %d\n", HCF(m, n));
	printf("LCM = %d\n", LCM(m, n));
	
	free(m);
	free(n);
	system("pause");
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Navigator_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值