本文是通過例子學習C++的第三篇,通過這個例子可以快速入門c++相關的語法。
題目要求:輸入兩個整數,求其大公約數。
解答方法一:兩個數的最大公約數,是這兩個數中的小數,或者是這2個數的公約數中的最大數字。
這兩個數字用num1和num2存儲,min表示其中最小數字。如果num1和num2能同時整除min,則min為起最大公約數,否則min=min-1,重復該循環直到num1和num2能同時整除min。似曾相識?是的,和上一篇求最小公倍數方法差不多。
#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++中單行注釋用 //
也可以多行注釋 /* */
-
輾轉相除法求最大公約數
輾轉相除法為什么可以求最大公約數?對於該方法,知其然但不知所以然,只能暫時“不求甚解”。需要的的話,可以自行查詢相關證明。
程序運行后效果如下: