比较两个数的 得到最大公因数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);//输入2个值 
	int max = 0;
	if (a > b)     //让max赋值b
	{
		max = b;
	}
	else          //让max赋值a
	{
		max = a;
	}
	while(1)     //1为真进入循环
	{
		if (a % max == 0 && b % max == 0)
		{
			printf("最大公约数是:%d\n", max);
			break;//找到了跳出
		}
		max--;//不满足条件减1
	}
	return 0;
}

例20 和 12               20比12大

最大公约数肯定小于等于12 我们直接从12开始每次-1

直到找到满足 20 % max = 0 &&(并且) 12 % max = 0 就找到最大公约数 但有个缺点 比较麻烦

例2:辗转反侧法

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = 0;
	while (max = a % b) //while循环只有为假0才不循环 (max != 0就在循环)
//12 % 20 =12
//20 % 12 = 8 都为真
	{
		a = b; //这里把b的值给a
		b = max;//算出来的max给b 再重算
	}
	printf("最大公约数是: %d\n", b);
	return 0;
}

实现过程 例a = 12 b =20

第一次 a(12) % b(20) = max (12) (为真进入循环)

把b=20赋值给a

把a % b =12 (也就是max的值)赋值给b

第二次 a(20) % b(12) = max (8) 

这里a就变成12  

b就变成8

第三次 a(12) % b(8) = max (4) 

这里a变成8

b变成4

第四次 a(8) % b(4) = max (0) (此时为假不进入循环)打印b=4

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值