• 通过例子进阶学习C++(三)最大公约数


    本文是通过例子学习C++的第三篇,通过这个例子可以快速入门c++相关的语法。

    题目要求:输入两个整数,求其大公约数。

    解答方法一:两个数的最大公约数,是这两个数中的小数,或者是这2个数的公约数中的最大数字。

    这两个数字用num1和num2存储,min表示其中最小数字。如果num1和num2能同时整除min,则min为起最大公约数,否则min=min-1,重复该循环直到num1和num2能同时整除min。似曾相识?是的,和上一篇求最小公倍数方法差不多。

    通过例子学习C++(二)最小公倍数

    #include <iostream>
    using namespace std;
    int main()
    {
    	int num1,num2,min;
    	cin>>num1>>num2;
        
        //求num1和num2中的最小数字
        if(num1<num2){
            min = num1;
        }else{
            min = num2;
        }
            
        while(num1 %min !=0 || num2 %min !=0){
            min--;
        }
        cout<<"数字"<<num1<<"和数字"<<num2<<"的最大公约数为:"<<min;
    	return 0;
    }
    

    通过该例子,可以学习:

    • if-else语句

      为了养成良好的习惯,我在if和else语句的语句体中,都增加了大括号。这样养成习惯后,不会忘记括号而导致的错误。

    • while循环

      同上,尽管while语句的语句体也只有一句,此处也增加了大括号。不能说是非常好的习惯,但可以避免忘记括号导致的错误。

    程序运行后效果如下:

    上述求最大公约数的方法,执行效率不高。可以改进如下:

    解答方法二:两个数的最大公约数,辗转相除法(又叫欧几里得算法)。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int num1,num2,r,temp;
    	cin>>num1>>num2;
    	cout<<"数字"<<num1<<"和数字"<<num2<<"的最大公约数为:";
     
        //通过temp变量,交换两个数 
    //    if(num1<num2){
    //    	temp = num1;
    //    	num1 = num2;
    //    	num2 = temp;
    //	} 
    	
        r = num1 % num2;
        while(r !=0){
        	num1 = num2;
    		num2 = r;
    		r = num1 % num2; 
    	}
    
        cout<<num2;
    	return 0;
    }
    

    通过该例子,可以学习:

    • 交换两个数字

      交换两个数字,此处演示了通过临时变量temp交换两个数。

      还有另外一个方法可以交换两个数字(此处假设num1<num2),至于为什么请自行思考:

      num1 = num2 - num1;
      num2 = num2 - num1;
      num1 = num1 + num2;
      
    • while循环

    • c++中的注释

      在c++中单行注释用 //

      也可以多行注释 /* */

    • 辗转相除法求最大公约数

      辗转相除法为什么可以求最大公约数?对于该方法,知其然但不知所以然,只能暂时“不求甚解”。需要的的话,可以自行查询相关证明。

    程序运行后效果如下:

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    [转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
    [转]ASP.NET Core配置环境变量和启动设置
    [转]ASP.NET Core 指定环境发布(hosting environment)
    [转]COPY OR MOVE FILES AND FOLDERS USING OLE AUTOMATION
    [转]How to Use xp_dirtree to List All Files in a Folder
    [转]How to nest transactions nicely
    [转]Using TRY...CATCH in Transact-SQL
    [转][C#] 对List<T>取交集、连集及差集
    [转]Pass a ViewBag instance to a HiddenFor field in Razor
    Apache Ignite简介以及Ignite和Coherence、Gemfire、Redis等的比较
  • 原文地址:https://www.cnblogs.com/siweihz/p/12184790.html
Copyright © 2020-2023  润新知