本文是通过例子学习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语句的语句体也只有一句,此处也增加了大括号。不能说是非常好的习惯,但可以避免忘记括号导致的错误。

程序运行后效果如下:

通过例子学习C++(三)最大公约数,并知其然-LMLPHP

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

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

#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++中单行注释用 //

    也可以多行注释 /* */

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

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

程序运行后效果如下:

通过例子学习C++(三)最大公约数,并知其然-LMLPHP

05-11 21:55