C语言练习之求最大公约数

简介: C语言练习之求最大公约数

前言

求两个数的最大公约数是一个很基础的数学问题,今天我来和大家分享用C语言求两个数的最大公约数的三种方法。

一、三种方法的基本原理和求解思路

1、辗转相除法

原理:

取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数;

如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。

思路:

先判断两个数的大小,大的数赋值给n,小的数赋值给m。

用n%m如果结果为0则m的值为最大公约数

如果结果不为0,则将小的数赋值给n,将余数赋值给m

循环运算直到n%m==0成立

2、更相减损法

原理:

取两个数中的较大数做被减数,较小数做减数,用被减数减去减数,如果结果为0,则减数就是这两个数的最大公约数;

如果结果不为0,则将原减数作为新的被减数,上次的差作为新的减数,再进行运算,直到结果为0,则最大公约数为最终的减数。

思路:

先判断两个数的大小,将较大数赋值给n,将较小值赋值给m;

判断n-m==0是否成立

如果成立,则最大公约数为m;

如果不成立,则将n-m的值赋值给m,将原本的m的值赋值给n再进行运算和判断;

循环不成立时的过程直到成立,则最大公约数为m。

3、短除法

原理:

找出两个数的所有公约数,最大的那个就是最大公约数

思路:

先找出较小数,找约数时的限制条件就是不能超过较小数的值,所有公约数中最大的就是最大公约数

二、源代码以及运行截图

为了方便大家的交流和学习,我将程序的源代码放置在下方。

1、辗转相除法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  printf("请输入两个操作数:>");
  scanf("%d %d", &n, &m);
  if (n < m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  while (1)
  {
    if (n % m == 0)
    {
      printf("这两个数的最大公约数为%d\n", m);
      break;
    }
    else
    {
      temp = m;
      m = n % m;
      n = temp;
    }
  }
  return 0;
}

运行截图:

2、更相减损法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  printf("请输入两个操作数:>\n");
  scanf("%d %d", &n, &m);
  if (n < m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  while (1)
  {
    if (n - m == 0)
    {
      printf("这两个数的最大公约数为%d\n", m);
      break;
    }
    else
    {
      temp = m;
      m = n - m;
      n = m;
    }
  }
  return 0;
}

 运行截图:

3、短除法

int main()
{
  int n = 0;
  int m = 0;
  int temp = 0;
  int i = 1;
  int t = 0;
  printf("请输入两个操作数:>\n");
  scanf("%d %d", &n, &m);
  if (n > m)
  {
    temp = n;
    n = m;
    m = temp;
  }
  for (i = 1; i <= n; i++)
  {
    if (n % i == 0 && m % i == 0)
    {
      t = i;
    }
  }
  printf("这两个数的最大公约数为%d\n", t);
  return 0;
}

 运行截图:

总结

 以上就是今天要讲的内容,本文简单的介绍了用C语言求两个数的最大公约数的三种方法的思路,还进一步用展示了代码的运行结果验证了作者的思路。

本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。

最后,如果本篇文章对你有所启发的话,也希望可以支持支持作者,后续作者也会定期更新学习记录。谢谢大家!

相关文章
|
2月前
|
C语言
C语言练习5
C语言练习5。
12 2
|
2月前
|
人工智能 BI C语言
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
17 1
|
2月前
|
算法 C语言
C语言求最大公约数
C语言求最大公约数
|
2月前
|
算法 C语言
C语言中的最大公约数和最小公倍数,居然如此简单!
C语言中的最大公约数和最小公倍数,居然如此简单!
|
12天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
12天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
|
15天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
15天前
|
C语言
换硬币问题(C语言代码练习)
换硬币问题(C语言代码练习)
|
24天前
|
C语言
最大公约数和最小公倍数(c语言)
最大公约数和最小公倍数(c语言)
|
1月前
|
机器学习/深度学习 人工智能 算法
二级C语言选择题练习附答案
二级C语言选择题练习附答案