C //习题 7.1 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

C程序设计 (第四版) 谭浩强 习题7.1

习题 7.1 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

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

 

代码块
方法1:
#include <stdio.h>
#include <stdlib.h>

int sum;                                          //定义外部变量sum

//最大公约数函数
int HCF(int x, int y){
    int i, k, m, n;
    sum = 1;
    k = x > y ? y : x;
    i = 2;
    while (i <= k){
        m = x % i;
        n = y % i;
        if (m == 0 && n == 0){
            sum *= i;
            x /= i;
            y /= i;
            i = 2;
        }
        else
            i++;
    }    
    return sum;
}

//最小公倍数函数
int LCM(int p, int q){
    int lc;
    lc = p * q / sum;
    return lc;
}

int main(){
    int a, b, hcf, lcm;
    
    scanf("%d %d", &a, &b);                       //输入两个整数
    
    hcf = HCF(a, b);                              //调用最大公约数函数
    lcm = LCM(a, b);                              //调用最小公倍数函数
    printf("HCF is %d  LCM is %d\n", hcf, lcm);   //输出最大公约数和最小公倍数
    
    system("pause");
    return 0;
}
方法2:
#include <stdio.h>
#include <stdlib.h>

//最大公约数函数(利用欧几里得算法)
int HCF(int x, int y){
	for (int z = x % y; z != 0; x = y, y = z, z = x % y);
	return y;
}

//最小公倍数函数
int LCM(int x, int y)
{
	return (x * y) / HCF(x, y);
}

int main(){
	int a, b;
	
	printf("Please enter 2 numbers: ");               //输入两个整数
	scanf("%d %d", &a, &b);
	printf("HCF = %d, LCM = %d\n", HCF(a, b), LCM(a, b)); //输出最大公约数和最小公倍数
	
	system("pause");
	return 0;
}
解答第二条评论,处理数组n个元素的最大公约数
#include <stdio.h>
#include <stdlib.h>

int HCF(int x, int y)
{
	for (int z = x % y; z != 0; x = y, y = z, z = x % y);
	return y;
}

int main(){
	int n[4], temp;
	
	for(int i = 0; i < 4; i++){
		printf("Please enter No.%d number: ", i + 1);
		scanf("%d", &n[i]);
	}
	for(int i = 0, temp = n[0]; i < 4; i++)
		temp = HCF(temp, n[i]);
	printf("HCF = %d\n", temp);
	
	system("pause");
	return 0;
}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Navigator_Z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值