鱼C论坛

 找回密码
 立即注册
查看: 779|回复: 7

[已解决]来大神

[复制链接]
发表于 2020-11-18 23:13:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
2. 编写两个函数分别用来求两个数的最大公约数和最小公倍数,然后在主函数中,通过键盘输入任意两个整数,调用前面的两个函数来输出这两个整数的最大公约数和最小公倍数。
求最大公约数算法:辗转相除法
例如,求两整数a和b的最大公约数:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
如求27和15的最大公约数过程为:
27%15=12,15%12=3,12%3=0因此,3即为最大公约数
(1)源程序代码:



(2)运行结果截图
最佳答案
2020-11-18 23:19:29
zxcv89878221 发表于 2020-11-18 23:14
#include

//最大公约数

先将我写给你,再来看你的
#include <stdio.h>
int main()
{
        int a, b, p, m, r;
        printf("请输入两个整数\n");
        scanf("%d%d", &a, &b);
        if (a < b)          // 明确两个数哪个大,为后面碾除作准备
        {
                m = a;
                a = b;
                b = m;
        }
        p = a * b;
        while (b != 0)       //碾除法,直到 b 为 0.
        {
                r = a % b;
                a = b;
                b = r;
        }
        printf("最大公约数:%d\n", a);
        printf("最小公倍数:%d\n", p / a);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-18 23:14:45 | 显示全部楼层
#include<stdio.h>

//最大公约数
size_t GCD(size_t a, size_t b)
{

        size_t gcd;
        gcd = a > b ? b : a;
        while (gcd > 1)
        {
                if ((a % gcd == 0) && (b % gcd == 0))
                        return gcd;
                gcd--;
        }
        return gcd;
}

//最小公倍数
size_t LCM(size_t a, size_t b)
{
        size_t lcm;
        lcm = a > b ? a : b;
        while (1)
        {
                if ((lcm % a == 0) && (lcm % b == 0))
                        break;
                lcm++;
        }
        return lcm;
}

int main()
{
        size_t a, b, result;
        printf("请输入两个整数:>");
        scanf("%d %d", &a, &b);

        result = GCD(a, b);
        printf("%d和%d的最大公约数为:%d\n", a, b, result);
        result = LCM(a, b);
        printf("%d和%d的最小公倍数为:%d\n", a, b, result);

        return 0;
}


这个是本人写的 不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 23:19:29 | 显示全部楼层    本楼为最佳答案   
zxcv89878221 发表于 2020-11-18 23:14
#include

//最大公约数

先将我写给你,再来看你的
#include <stdio.h>
int main()
{
        int a, b, p, m, r;
        printf("请输入两个整数\n");
        scanf("%d%d", &a, &b);
        if (a < b)          // 明确两个数哪个大,为后面碾除作准备
        {
                m = a;
                a = b;
                b = m;
        }
        p = a * b;
        while (b != 0)       //碾除法,直到 b 为 0.
        {
                r = a % b;
                a = b;
                b = r;
        }
        printf("最大公约数:%d\n", a);
        printf("最小公倍数:%d\n", p / a);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 23:23:41 | 显示全部楼层
风过无痕1989 发表于 2020-11-18 23:19
先将我写给你,再来看你的

感谢大神  结果都一样 是不是你这个更简约一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 23:27:34 | 显示全部楼层
zxcv89878221 发表于 2020-11-18 23:14
#include

//最大公约数

运行了一下,你的程序没有问题。
我给的是一种方法,但好像不是你所要的,你要的是使用函数,那么,你自己的就很好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 23:29:08 | 显示全部楼层
风过无痕1989 发表于 2020-11-18 23:27
运行了一下,你的程序没有问题。
我给的是一种方法,但好像不是你所要的,你要的是使用函数,那么,你自 ...

大神  你的代码 我在VS19上面用不了  scanf 需要加_s  才能运行  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 23:31:30 | 显示全部楼层
zxcv89878221 发表于 2020-11-18 23:29
大神  你的代码 我在VS19上面用不了  scanf 需要加_s  才能运行

设置一下就可以了,我的VS2015是这样的,当然,你若是找到不到,直接加个 _s 也是可的,只是每次都要这么做,麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 23:37:59 | 显示全部楼层
zxcv89878221 发表于 2020-11-18 23:29
大神  你的代码 我在VS19上面用不了  scanf 需要加_s  才能运行

这里有介绍,去看看:
https://blog.csdn.net/hou09tian/article/details/78278413
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表