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 浅显的会议预约-没有测试过
    Postgresql 与 Spring的集成
    对象转JSON正则查找替换
    Java 对象与JSONString的互相转换
    excel 中涉及到金额显示0E-8的 可以使用以下语句来把excel导出修改为0
    Java 非正则方式校验数据
    泛型与反射的使用
    正则表达式,匹配 URL 是IP还是域名
    对外接口加密
    自定义SQL查询的使用
  • 原文地址:https://www.cnblogs.com/siweihz/p/12184790.html
Copyright © 2011-2022 走看看