拓展:求三个数的最大公约与最小公倍数

完成了求两个数的最大公约数问题,联想到求三个数的最大公约数该如何解决,轻松解决后又联想到最小公倍数的问题。百思不得其算法。在百度找了很多关于这个程序的代码,都觉得很难理解,越看越晕,甚至于有些回答者的代码没经过编辑-验证,就直接回答了,基本都是错的。 
下面是 自己想苦思冥想了一晚上想出来的方法,虽然不是按教科书上的科学方法来作为程序的算法,方法有点笨,纯穷举算法。此法用笔来计算的话,如果数值够大,计算量将非常巨大,甚至难以完成。也但是交由计算机来完成,就是小Case了。所以,还是值得鼓励下自己,为自己欢呼吧! 拓展:求三个数的最大公约与最小公倍数 - Jesse - 海的聲音


# include <stdio.h>
# include <conio.h>
main()
{
int x, y, z, a, b, min, max;

printf("请输入三个整数以空格分隔:");

scanf("%d %d %d", &x,&y,&z);
if(x<y)
{
min = x; max = y;
}
else
{
min = y; max = x;
}

if(min>z)
min = z; //求出三个数中最小数,赋给a;
if(max<z)
max = z; //求出三个数中最大数,赋给b;

for(a=min;a>=1;a--) //(最大公约数不可能大于三个数中的最小数)用这三数去除以a,a的值每次-1;
//也可以(a=1;a>=1;a++),或者(a=min;a<=min;a--)
{
if(x%a==0 && y%a==0 && z%a==0) //当三个数同时被a整除,此时a的值就是三个数的最大公约数;
break; // 停止a穷举;
}
for(b = max;;b++) //(最小公倍数不会小于三个数中的最大数),起点用max赋值,可以减少无意义的穷举;
//(b = max;;b++)分号之间可以写做(b = max;b>=max;b++)留空也一样,但不能省略;号。
{
if(b%x==0 && b%y==0 && b%z==0) 当b能被x、y、z同时整除,此时b的值就是三个数的最小公倍数;
break; // 停止b穷举;
}

printf("\n这三个数的最小数是:%d,最大数是:%d。\n", min, max);
printf("\n最大公约数是%d,最小公倍数是%d。\n\n", a, b);

getch(); //防止程序执行后自动执行任意键导致闪退;所在头文件:<conio.h>
//也可以用goto...语句,或者头文件:stdlib.h 下的system("pause"); 语句解决。

}
/* 该程序在VC++6.0中执行的结果如下:
-------------------------
请输入三个整数以空格分隔:1 5 6

这三个数的最小数是:1,最大数是:6。

最大公约数是1,最小公倍数是30。

-------------------------
*/


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值