C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

简介: 思路一:普通方法总体思路:(一). 生成相关变量;从键盘输入两个数;

思路一:普通方法

总体思路:

(一). 生成相关变量

从键盘输入两个数

使用 三目操作符(条件操作符) 找出较小值

             

(二). 使用 while循环

在循环中设置 if条件判断语句

用两数分别 模以能整除(没有余数)较小值 就是 最大公约数

不能整除(没有余数)较小值自减1

直到能整除,此时 较小值 就是 最大公约数

进行打印较小值

第一步:

(1). 生成相关变量

int m = 0; -- 接收从键盘输入的第一个数

int n = 0; -- 接收从键盘输入的第二个数

                 

(2). 从键盘输入两个数 -- scanf()函数

         

(3). 使用 三目操作符(条件操作符)找出 较小值赋给 变量k

int k = (m > n ? n : m);

                   

实现代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  //使用 三目操作符(条件操作符)找出较小值赋给变量k
  int k = (m > n ? n : m); //也可以用if条件判断语句
  return 0;
}


实现图片:


b0d9be1569ba4556974f6395253ee45b.png                

第二步:

(1). 使用 while循环

           

           

(2). 在循环中设置 if条件判断语句

用两数分别 模以较小值

能整除较小值 就是 最大公约数不能整除较小值自减1

直到能整除,此时 较小值 就是 最大公约数

进行打印

实现代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  //使用 三目操作符(条件操作符)找出较小值赋给变量k
  int k = (m > n ? n : m); //也可以用if条件判断语句
  //使用while循环:
  while (1) //一直循环,知道找到最大公约数再break跳出循环
  {
    //在循环中设置 if条件判断语句:
    if (m % k ==0 && n % k ==0)//用两数分别 模以 较小值
    {
      //能整除 则 较小值 就是 最大公约数
      break;//break跳出循环后进行打印
    }
    k--;//不能整除则 较小值 自减,再次循环,直到两个数都能被较小值整除
  }
  //进行打印:
  printf("%d\n", k);
  return 0;
}

实现图片:

image.png

思路一:最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  //使用 三目操作符(条件操作符)找出较小值赋给变量k
  int k = (m > n ? n : m); //也可以用if条件判断语句
  //使用while循环:
  while (1) //一直循环,知道找到最大公约数再break跳出循环
  {
    //在循环中设置 if条件判断语句:
    if (m % k ==0 && n % k ==0)//用两数分别 模以 较小值
    {
      //能整除 则 较小值 就是 最大公约数
      break;//break跳出循环后进行打印
    }
    k--;//不能整除则 较小值 自减,再次循环,直到两个数都能被较小值整除
  }
  //进行打印:
  printf("%d\n", k);
  return 0;
}

实现效果:

image.png

思路二:辗转相除法

总体思路:

(一). 生成相关变量,从键盘输入两个数

         

(二). 使用while循环 ,配合辗转相除法找出最大公约数

第一步:

(1). 生成相关变量

int m = 0; -- 接收第一个数

int n = 0; -- 接收第二个数

int k = 0; -- 存放使用辗转相除法后到的余数

(2). 从键盘输入两个数 -- scanf()函数

                   

实现代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  int k = 0; //存放使用 辗转相除法 后得到的 余数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  return 0;
}

实现图片:

4e5b68e3c01344a6a67268816b103ea3.png

第二步:

(1). 使用 while循环配合辗转相除法 找出最大公约数


(2). 辗转相除法:

第一个数 模以 第二个数 两数位置可调换)得到 余数

余数 不为0,则把 第二个数的值 赋给第一个数的值余数赋给第二个数

继续第一个数(此时是第二个数的值模以第二个数(此时是余数的值

得到 新的余数

循环这些步骤直到 余数为0 ,此时 第二个数 最大公约数

                   

(3). 打印 第二个数,即最大公约数。

实现代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  int k = 0; //存放使用 辗转相除法 后得到的 余数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  //使用 while循环 ,配合 辗转相除法 找出 最大公约数
  while (k = m % n) 
  //求余数,当余数为0后停止循环,此时,n为最大公约数
  {
    m = n; //第二个数的值 赋给 第一个数
    n = k; //余数 赋给 第二个数
    //赋值后再求余数,直到余数为0
  }
  //打印第二个数,即最大公约数
  printf("%d\n", n);
  return 0;
}

实现图片:

image.png

思路二:最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{
  //生成相关变量:
  int m = 0; //接收从键盘输入的第一个数
  int n = 0; //接收从键盘输入的第二个数
  int k = 0; //存放使用 辗转相除法 后得到的 余数
  //从键盘输入两个数:
  scanf("%d %d", &m, &n);
  //使用 while循环 ,配合 辗转相除法 找出 最大公约数
  while (k = m % n) 
  //求余数,当余数为0后停止循环,此时,n为最大公约数
  {
    m = n; //第二个数的值 赋给 第一个数
    n = k; //余数 赋给 第二个数
    //赋值后再求余数,直到余数为0
  }
  //打印第二个数,即最大公约数
  printf("%d\n", n);
  return 0;
}

实现效果:

106e78be5f1540459c92c48a041ff8bd.png

相关文章
|
7月前
|
人工智能 BI C语言
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
【C语言】求两个数的最大公约数和最小公倍数(极简代码版)
73 1
|
7月前
|
算法 C语言
C语言求最大公约数
C语言求最大公约数
|
7月前
|
算法 C语言
C语言中的最大公约数和最小公倍数,居然如此简单!
C语言中的最大公约数和最小公倍数,居然如此简单!
|
6月前
|
存储 安全 C语言
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
|
6月前
|
C语言
C语言---最大公约数和最小公倍数的求法
C语言---最大公约数和最小公倍数的求法
|
7月前
|
C语言
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
7月前
|
C语言
最大公约数和最小公倍数(c语言)
最大公约数和最小公倍数(c语言)
|
7月前
|
算法 C语言
C语言求最大公约数和最小公倍数
C语言求最大公约数和最小公倍数
78 0
|
7月前
|
算法 C语言
【C 语言经典100例】C 练习实例16 - 最大公约数和最小公倍数
【C 语言经典100例】C 练习实例16 - 最大公约数和最小公倍数
48 0
|
7月前
|
C语言
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
91 0