【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)

简介: 【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)

概念介绍

最大公约数——两个整数中公共约数(因数)的最大者

求最大公约数的方法有很多,如质数因数分解法、短除法、辗转相除法、更相减损法。

这里介绍使用代码实现求最大公约数的最简单的一种方法——辗转相除法

辗转相除法 数学思想介绍

求最大公约数过程——

比如有两个数,18和24

第一步:用第一个数18作为被除数,第二个数24作为除数,两个数做除法,并求余数

               18%24=18,余数为18

第二步:再将上一次计算中的除数作为被除数,余数作为除数,再进行除法运算求余数

               24%18=6

第三步:重复上一次操作

               再将上一次计算中的除数作为被除数,余数作为除数,再进行除法运算求余数

               18%6=0

一直进行求余数操作,直到余数为0时,这时的除数就是初始两个数的最大公约数

注意:不管两个数谁大谁小,只要按此过程就可以得到最大公约数

图解演示

代码思路

要实现求两个数的最大公约数,明白了数学逻辑,实现就变得很简单

  1. 创建两个整型变量存储键盘输入的数据
  2. scanf函数读入数据(如果是多组输入的话,使用while循环读入数据)
  3. 求最大公约数的过程用一个循环来实现,余数为0就是循环结束的条件,在每一次循环过程中完成除数和被除数的调整

代码实现

#include<stdio.h>
int main()
{
  int a = 0, b = 0;
  while (scanf("%d %d", &a, &b) != EOF)
  {
    int c = 0;//用于临时存储余数
    while (c = a % b)//当余数不为0时,进行循环
    {
      a = b;//除数变为被除数
      b = c;//余数变为除数
    }
    printf("最大公约数为%d\n", b);
  }
 
}

代码改进

如果你仔细观察上面实现的这段代码的话,就会发现,最初我们输入的两个值在经过计算后被破坏了,计算完成之后就无法再使用初始的值

所以,我们将代码进行一下改进,每次用两个临时变量来拷贝输入的值,然后进行运算的时候只对临时拷贝的值进行操作,初始的两个值就被保留了下来。这样一个微不足道的小细节对于我们养成保持数据的安全和一致性是一个好习惯

#include<stdio.h>
int main()
{
  int a = 0, b = 0;
  while (scanf("%d %d", &a, &b) != EOF)
  {
    int c = 0;//用于临时存储余数
    int temp1 = a, temp2 = b;//拷贝要进行运算的两个整数
    while (c = temp1 % temp2)//当余数不为0时,进行循环
    {
      temp1 = temp2;//除数变为被除数
      temp2 = c;//余数变为除数
    }
    printf("%d和%d的最大公约数为%d\n", a,b,temp2);
  }
 
}

效果展示

 

相关文章
|
4月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
19天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
40 6
|
20天前
|
存储 算法 安全
C 语言中的位运算:挖掘底层计算的高效力量
位运算是C语言中直接操作二进制位的一种技术,能高效处理底层数据,广泛应用于优化算法、硬件编程等领域,是掌握C语言高级特性的关键之一。
|
22天前
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
66 4
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
17 0
|
4月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
4月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
4月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
6月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
6月前
|
C语言
C语言刷题(数组)
C语言刷题(数组)