E12.【C语言】练习:求两个数的最大公约数

1.枚举

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int tmp = 0;
	scanf("%d %d", &a, &b);
	if (a < b)
	{
		for (int i=1; i < a; i++)
		{
			if (0==a% i  && 0==b%i)
				tmp = i;
		}
	}
	if (a>b)
	{
		for (int i = 1; i < b; i++)
		{
			if (0 == b % i && 0 == a % i)
				tmp = i;
		}

	}
	if (a = b)
		tmp = a;
	printf("%d", tmp);
	return 0;
}

注意i不能从0开始否则有Integer division by zero报错,即整数除以零

但是代码可以进一步简化:

输入两个数-->找出最小数-->从最小数开始:从大向小找,一旦找到就是最大公约数

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int tmp = 0;
	scanf("%d %d", &a, &b);
	if (a > b)
		tmp = b;
	else
		tmp =a;
	while (1)//一直循环
	{
		if (0 == a % tmp && 0 == b % tmp)
		{
			printf("%d", tmp);
			break;
		}
		tmp--;
	}
	return 0;
}

2.辗转相除法

定义:先用较大的数除以较小的数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。此时的除数就是所求的最大公约数。

18%24=18-->24%18=6-->18%6=0-->6是最大公约数

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int tmp = 0;
	scanf("%d %d", &a, &b);
	while (tmp=a%b)//循环,m%n=0退出
	{
		a = b;
		b = tmp;
     }
	printf("%d", b);
	return 0;
}

最小公倍数=a*b/最大公约数

相关推荐
报错小能手5 小时前
ios开发方向——swift错误处理:do/try/catch、Result、throws
开发语言·学习·ios·swift
网域小星球6 小时前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
aq55356006 小时前
三大编程语言深度对比:C# vs 易语言 vs 汇编
开发语言·汇编·c#
独特的螺狮粉6 小时前
云隙一言:鸿蒙Flutter框架 实现的随机名言应用
开发语言·flutter·华为·架构·开源·harmonyos
光泽雨6 小时前
c# 文件编译的过程
开发语言·c#
赤水无泪6 小时前
09 C++ 11 新增的标准
开发语言
格林威6 小时前
工业相机 SDK 在 Docker 容器中的部署与权限配置(含 USB/GigE)
开发语言·人工智能·数码相机·计算机视觉·docker·容器·工业相机
哎嗨人生公众号6 小时前
手写求导公式,让轨迹优化性能飞升,150ms变成9ms
开发语言·c++·算法·机器人·自动驾驶
code_whiter7 小时前
C++6(模板)
开发语言·c++
lcj25117 小时前
【C语言】数据在内存中的存储
c语言·数据结构