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


    题目:

    从键盘输入两个数两个数最大公约数

                        

     =========================================================================

                           

    思路一:普通方法

    总体思路:

    (一). 生成相关变量

    从键盘输入两个数

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

                   

    (二). 使用 while循环

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

    用两数分别 模以 较小值

    能整除(没有余数)较小值 就是 最大公约数

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

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

    进行打印

                    


                     

    第一步:

    (1). 生成相关变量

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

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

                       

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

               

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

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

                         

    实现代码:

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

    实现图片:

                     


                     

    第二步:

    (1). 使用 while循环

                 

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

    用两数分别 模以 较小值

    能整除较小值 就是 最大公约数

    不能整除较小值 自减1

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

    进行打印

                         

    实现代码:

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

    实现图片:

                        

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

    最终代码:

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

    实现效果:

                        

     =========================================================================

                           

    思路二:辗转相除法

    总体思路:

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

               

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

                    


                  

    第一步:

    (1). 生成相关变量

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

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

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

                  

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

                         

    实现代码:

    1. #include
    2. int main()
    3. {
    4. //生成相关变量:
    5. int m = 0; //接收从键盘输入的第一个数
    6. int n = 0; //接收从键盘输入的第二个数
    7. int k = 0; //存放使用 辗转相除法 后得到的 余数
    8. //从键盘输入两个数:
    9. scanf("%d %d", &m, &n);
    10. return 0;
    11. }

    实现图片:

                     


                     

    第二步:

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

                            

    (2). 辗转相除法:

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

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

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

    得到 新的余数

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

                         

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

                          

    实现代码:

    1. #include
    2. int main()
    3. {
    4. //生成相关变量:
    5. int m = 0; //接收从键盘输入的第一个数
    6. int n = 0; //接收从键盘输入的第二个数
    7. int k = 0; //存放使用 辗转相除法 后得到的 余数
    8. //从键盘输入两个数:
    9. scanf("%d %d", &m, &n);
    10. //使用 while循环 ,配合 辗转相除法 找出 最大公约数
    11. while (k = m % n)
    12. //求余数,当余数为0后停止循环,此时,n为最大公约数
    13. {
    14. m = n; //第二个数的值 赋给 第一个数
    15. n = k; //余数 赋给 第二个数
    16. //赋值后再求余数,直到余数为0
    17. }
    18. //打印第二个数,即最大公约数
    19. printf("%d\n", n);
    20. return 0;
    21. }

    实现图片:

                        

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

    最终代码:

    1. #include
    2. int main()
    3. {
    4. //生成相关变量:
    5. int m = 0; //接收从键盘输入的第一个数
    6. int n = 0; //接收从键盘输入的第二个数
    7. int k = 0; //存放使用 辗转相除法 后得到的 余数
    8. //从键盘输入两个数:
    9. scanf("%d %d", &m, &n);
    10. //使用 while循环 ,配合 辗转相除法 找出 最大公约数
    11. while (k = m % n)
    12. //求余数,当余数为0后停止循环,此时,n为最大公约数
    13. {
    14. m = n; //第二个数的值 赋给 第一个数
    15. n = k; //余数 赋给 第二个数
    16. //赋值后再求余数,直到余数为0
    17. }
    18. //打印第二个数,即最大公约数
    19. printf("%d\n", n);
    20. return 0;
    21. }

    实现效果:

  • 相关阅读:
    Linux下MySQL安装问题解决以及注意事项(以腾讯云服务为主)
    关于http网络通信数据包封装的过程
    CSDN的文档编辑器使用
    随机对联易语言代码
    提高IT运维效率,深度解读京东云AIOps落地实践(异常检测篇)
    Linux下手动修改服务器时间(没网环境下)
    SpringBoot-34-shiro整合thymeleaf
    Java面试题-Redis-第三天(缓存更新策略-由旁路缓存策略衍生出的一系列问题)
    【第39篇】RepLKNet将内核扩展到 31x31:重新审视 CNN 中的大型内核设计
    [坐标系转换]车体坐标系 转 像素坐标系
  • 原文地址:https://blog.csdn.net/weixin_63176266/article/details/131151313