題目:
從鍵盤輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)。
? ? ? ? ? ? ? ? ? ??文章來源:http://www.zghlxwxcb.cn/news/detail-487287.html
?=========================================================================
? ? ? ? ? ? ? ? ? ? ? ?
思路一:普通方法
總體思路:
(一). 生成相關(guān)變量;
從鍵盤輸入兩個(gè)數(shù);
再使用 三目操作符(條件操作符) 找出較小值。
? ? ? ? ? ? ? ?
(二). 使用 while循環(huán) ,
在循環(huán)中設(shè)置 if條件判斷語句,
用兩數(shù)分別?模以 較小值 ,
能整除(沒有余數(shù)) 則 較小值 就是 最大公約數(shù) ,
不能整除(沒有余數(shù)) 則 較小值 自減1,
直到能整除,此時(shí) 較小值 就是 最大公約數(shù),
進(jìn)行打印。
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ?
第一步:
(1). 生成相關(guān)變量:
int m = 0; -- 接收從鍵盤輸入的第一個(gè)數(shù);
int n = 0; -- 接收從鍵盤輸入的第二個(gè)數(shù)。
?? ? ? ? ? ? ? ? ??
(2). 從鍵盤輸入兩個(gè)數(shù) -- scanf()函數(shù)。
? ? ? ? ? ?
(3). 使用 三目操作符(條件操作符)找出 較小值 賦給 變量k:
int k = (m > n ? n : m);
? ? ? ? ? ? ? ? ? ? ?
實(shí)現(xiàn)代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); //使用 三目操作符(條件操作符)找出較小值賦給變量k int k = (m > n ? n : m); //也可以用if條件判斷語句 return 0; }
實(shí)現(xiàn)圖片:
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
第二步:
(1). 使用 while循環(huán) ;
? ? ? ? ? ? ?
(2). 在循環(huán)中設(shè)置 if條件判斷語句:
用兩數(shù)分別?模以 較小值 ,
能整除 則 較小值 就是 最大公約數(shù) ,
不能整除 則 較小值 自減1,
直到能整除,此時(shí) 較小值 就是 最大公約數(shù),
進(jìn)行打印。
? ? ? ? ? ? ? ? ? ? ?
實(shí)現(xiàn)代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); //使用 三目操作符(條件操作符)找出較小值賦給變量k int k = (m > n ? n : m); //也可以用if條件判斷語句 //使用while循環(huán): while (1) //一直循環(huán),知道找到最大公約數(shù)再break跳出循環(huán) { //在循環(huán)中設(shè)置 if條件判斷語句: if (m % k ==0 && n % k ==0)//用兩數(shù)分別 模以 較小值 { //能整除 則 較小值 就是 最大公約數(shù) break;//break跳出循環(huán)后進(jìn)行打印 } k--;//不能整除則 較小值 自減,再次循環(huán),直到兩個(gè)數(shù)都能被較小值整除 } //進(jìn)行打印: printf("%d\n", k); return 0; }
實(shí)現(xiàn)圖片:
? ? ? ? ? ? ? ? ? ??
思路一:最終代碼和實(shí)現(xiàn)效果
最終代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); //使用 三目操作符(條件操作符)找出較小值賦給變量k int k = (m > n ? n : m); //也可以用if條件判斷語句 //使用while循環(huán): while (1) //一直循環(huán),知道找到最大公約數(shù)再break跳出循環(huán) { //在循環(huán)中設(shè)置 if條件判斷語句: if (m % k ==0 && n % k ==0)//用兩數(shù)分別 模以 較小值 { //能整除 則 較小值 就是 最大公約數(shù) break;//break跳出循環(huán)后進(jìn)行打印 } k--;//不能整除則 較小值 自減,再次循環(huán),直到兩個(gè)數(shù)都能被較小值整除 } //進(jìn)行打?。? printf("%d\n", k); return 0; }
實(shí)現(xiàn)效果:
? ? ? ? ? ? ? ? ? ??
?=========================================================================
? ? ? ? ? ? ? ? ? ? ? ?
思路二:輾轉(zhuǎn)相除法
總體思路:
(一). 生成相關(guān)變量,從鍵盤輸入兩個(gè)數(shù)。
? ? ? ? ? ?
(二). 使用while循環(huán) ,配合輾轉(zhuǎn)相除法找出最大公約數(shù)。
? ? ? ? ? ? ? ??
? ? ? ? ? ? ??
第一步:
(1). 生成相關(guān)變量:
int m = 0; -- 接收第一個(gè)數(shù);
int n = 0; -- 接收第二個(gè)數(shù);
int k = 0; -- 存放使用輾轉(zhuǎn)相除法后得到的余數(shù)。
? ? ? ? ? ? ??
(2). 從鍵盤輸入兩個(gè)數(shù) -- scanf()函數(shù)
? ? ? ? ? ? ? ? ? ? ?
實(shí)現(xiàn)代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) int k = 0; //存放使用 輾轉(zhuǎn)相除法 后得到的 余數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); return 0; }
實(shí)現(xiàn)圖片:
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
第二步:
(1). 使用 while循環(huán) ,配合 輾轉(zhuǎn)相除法 找出最大公約數(shù)。
? ? ? ? ? ? ? ? ? ? ? ??
(2). 輾轉(zhuǎn)相除法:
用 第一個(gè)數(shù) 模以 第二個(gè)數(shù) (兩數(shù)位置可調(diào)換)得到 余數(shù),
若 余數(shù) 不為0,則把 第二個(gè)數(shù)的值 賦給 第一個(gè)數(shù)的值,余數(shù) 賦給 第二個(gè)數(shù),
繼續(xù) 把 第一個(gè)數(shù)(此時(shí)是第二個(gè)數(shù)的值) 模以?第二個(gè)數(shù)(此時(shí)是余數(shù)的值)
得到 新的余數(shù) ,
循環(huán)這些步驟,直到 余數(shù)為0?,此時(shí) 第二個(gè)數(shù) 為 最大公約數(shù)。
? ? ? ? ? ? ? ? ? ? ?
(3). 打印 第二個(gè)數(shù),即最大公約數(shù)。
? ? ? ? ? ? ? ? ? ? ??
實(shí)現(xiàn)代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) int k = 0; //存放使用 輾轉(zhuǎn)相除法 后得到的 余數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); //使用 while循環(huán) ,配合 輾轉(zhuǎn)相除法 找出 最大公約數(shù) while (k = m % n) //求余數(shù),當(dāng)余數(shù)為0后停止循環(huán),此時(shí),n為最大公約數(shù) { m = n; //第二個(gè)數(shù)的值 賦給 第一個(gè)數(shù) n = k; //余數(shù) 賦給 第二個(gè)數(shù) //賦值后再求余數(shù),直到余數(shù)為0 } //打印第二個(gè)數(shù),即最大公約數(shù) printf("%d\n", n); return 0; }
實(shí)現(xiàn)圖片:
? ? ? ? ? ? ? ? ? ??
思路二:最終代碼和實(shí)現(xiàn)效果
最終代碼:
#include <stdio.h> int main() { //生成相關(guān)變量: int m = 0; //接收從鍵盤輸入的第一個(gè)數(shù) int n = 0; //接收從鍵盤輸入的第二個(gè)數(shù) int k = 0; //存放使用 輾轉(zhuǎn)相除法 后得到的 余數(shù) //從鍵盤輸入兩個(gè)數(shù): scanf("%d %d", &m, &n); //使用 while循環(huán) ,配合 輾轉(zhuǎn)相除法 找出 最大公約數(shù) while (k = m % n) //求余數(shù),當(dāng)余數(shù)為0后停止循環(huán),此時(shí),n為最大公約數(shù) { m = n; //第二個(gè)數(shù)的值 賦給 第一個(gè)數(shù) n = k; //余數(shù) 賦給 第二個(gè)數(shù) //賦值后再求余數(shù),直到余數(shù)為0 } //打印第二個(gè)數(shù),即最大公約數(shù) printf("%d\n", n); return 0; }
實(shí)現(xiàn)效果:
文章來源地址http://www.zghlxwxcb.cn/news/detail-487287.html
到了這里,關(guān)于C語言:給定兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)(新思路:輾轉(zhuǎn)相除法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!