当前位置: 首页 > news >正文

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

1.枚举 

#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报错,即整数除以零

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

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

#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;elsetmp =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是最大公约数

#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/最大公约数 

 

 

 

http://www.lryc.cn/news/399822.html

相关文章:

  • Elasticsearch:介绍 retrievers - 搜索一切事物
  • 全面升级的对象创建——抽象工厂模式(Python实现和JAVA实现)
  • 谷粒商城实战笔记-29~34-前端基础 - ES6
  • 浔川官方撤销浔川总社部社长王*职位——浔川官方
  • 小白学python(第七天)
  • npm和yarn清理缓存命令
  • 数据结构之初始二叉树(1)
  • STM32-寄存器点灯案例详解
  • Github Action 自动部署更新静态网页服务
  • 如何在CSS中控制动画的触发位置?
  • MFC流的形式读取图片
  • 查找PPT中某种字体的全部对应文字
  • 相机光学(三十一)——暗房设置的要求
  • Linux安全技术与防火墙
  • C#中简单Socket编程
  • UNIAPP_ReferenceError: TextEncoder is not defined 解决
  • 科普文:微服务技术栈梳理
  • 如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
  • PDF公式转Latex
  • excel 百分位函数 学习
  • (十一) Docker compose 部署 Mysql 和 其它容器
  • 提高项目透明度:有效的跟踪软件
  • 大模型生成人物关系思维导图的实战教程
  • 精通 mysqldumpslow:深度分析 MySQL 慢查询日志
  • C# Winform之propertyGrid控件分组后排序功能
  • Java基础(十九):集合框架
  • execute_script与JS
  • 访问 Postman OAuth 2.0 授权的最佳实践
  • 《BASeg: Boundary aware semantic segmentation for autonomous driving》论文解读
  • 高效利用iCloud指南