zoukankan      html  css  js  c++  java
  • 通过例子进阶学习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++中单行注释用 //

      也可以多行注释 /* */

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

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

    程序运行后效果如下:

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/siweihz/p/12184790.html
Copyright © 2011-2022 走看看