IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言练习——求两个数的最大公约数(三种算法) -> 正文阅读

[数据结构与算法]C语言练习——求两个数的最大公约数(三种算法)

给定两个整数,让你求这两个数的最大公约数

最大公约数顾名思义就是:这几个整数共有的约数中最大的一个。

目录

1. 辗转相除法

2.更相减损法

3.穷举法?


1. 辗转相除法

思路:

(1)将两个整数求余数a%b = c;如果c = 0,则b为最大公约数

(2)如果c != 0,则让a = b, b = c,继续执行a%b = c;判断条件为c是否为零

例如:a = 15,b = 18

c = a%b = 15%18 = 15,c = 15,c此时不等于0;

则进行a = b,b = c;a = 18,b = 15;

继续执行c = a%b = 18%15 = 3,此时c=3不为0;

执行a = b, b = c;a = 15,b = 3;

继续进行c = a%b = 15%3 = 0;此时c = 0循环结束。

代码如下:

#include<stdio.h>
int main()
{
	int a, b, c;
	printf("请输入两个整数:");
	scanf("%d%d", &a, &b);
	c = a % b;
	while (c != 0)
	{
		a = b;
		b = c;
		c = a % b;
	}
	printf("最大公约数为:%d", b);
	return 0;
}

2.更相减损法

思路:

(1)如果a = b;则a或b就是最大公约数

(2)如果a != b;若a>b,则a = a-b;若a<b,则b = b-a;一直执行到a = b循环结束

例如:a = 15,b = 18

因为a != b且a<b,则b = a-b = 18-15 = 3,

b = 3,a>b,则a = a-b = 15-3 = 12 ,

a = 12,a>b,则a = a-b =12-3 = 9,

a = 9,a>b,则a = a-b =9-3?= 6,

a = 6,a>b,则a = a-b =6-3 = 3,

a = 3,a = b = 3,此时a = b = 3循环结束。

代码如下:

#include <stdio.h>
int main()
{
	int a, b;
	printf("请输入两个整数:");
	scanf("%d %d", &a, &b);
	while (a != b)
	{
		if (a > b)
			a = a - b;
		else
			b = b - a;
	}
	printf("最大公约数为:%d\n", a);

	return 0;

}

3.穷举法?

思路:

(1)选出a和b最小的数放入c中,然后分别用a和b对c求余数,看是否能被c整除,同时能被c整除则c是这两个数的最大公约数

(2)如果不能被c同时整除,c进行减一(c--),一直执行到a和b同时能被c整除。

例如:a = 15,b = 18

把较小值赋给c,c = 15,a%c = 15%15 = 0,b = b%c = 18%15 = 3,不能同时被c整除,循环继续 c--;

a%c = 15%14?= 1,b = b%c = 18%14 = 4,不能同时被c整除,循环继续 c--;

....(不一一列举了)

a%c = 15%3?= 0,b = b%c = 18%3?= 0,能同时被c整除,循环结束。

代码如下:

#include<stdio.h>  
int main()
{

	int a, b;
	int c = 0;
	printf("请输入两个整数:");
	scanf("%d %d", &a, &b);
	c = (a > b) ? b : a;   //三目运算符 将最小的赋给c
	while (a % c != 0 || b % c != 0)    
	{
		c--;
	}
	printf("最大公约数为:%d\n", c);

}

最后,文章结束啦!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:49:54  更:2022-01-25 10:49:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:49:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码