【小白必懂】C语言最大、最小公约数题解
注意:學(xué)生黨如果存在付費(fèi)問題可以加我好友,我可以開單篇短時(shí)間的免費(fèi)喲~ 私聊我就好~
前言
本專欄內(nèi)容將會(huì)以輕松、簡單的方式完成習(xí)題的解答,用情景再現(xiàn)的文章風(fēng)格使讀者能夠在輕松愉悅的閱讀氛圍中完成知識(shí)的吸收,本專欄考慮讀者的吸收能力,不講解過多高效的計(jì)算方法,降低閱讀門檻,希望各位多多支持~
作者簡介
作者名:1_bit
簡介:CSDN博客專家,2020年博客之星TOP5,藍(lán)橋簽約作者。15-16年曾在網(wǎng)上直播,帶領(lǐng)一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關(guān)信息,迷茫的你會(huì)找到答案。
博客地址:https://i1bit.blog.csdn.net
情景再現(xiàn)(以下內(nèi)容不考慮數(shù)字 1 為約數(shù))
👸小媛:小C 今天我又遇見一個(gè)我不懂的知識(shí)點(diǎn)了。 😰
🐰小C:什么知識(shí)點(diǎn)?
👸小媛:是數(shù)學(xué)相關(guān)的。 😭
🐰小C:正常,很多知識(shí)點(diǎn)不用就會(huì)忘記的,沒什么好擔(dān)心的。說吧,是什么知識(shí)點(diǎn)呢?
👸小媛:就是公約數(shù),公約數(shù)我忘記了是什么知識(shí)了。 😫
🐰小C:哈哈哈,沒事,其實(shí)我也忘記什么是公約數(shù)了,剛剛就在你提問的瞬間我搜索了一下然后就記起來了。
👸小媛:你是在安慰我。
🐰小C:哈哈哈,真的,忘記很正常,你也別沮喪了,我先告訴你什么是公約數(shù)吧?
👸小媛:跪謝大佬指教! 😐
🐰小C:我們先看看什么是約數(shù)吧。如果有一個(gè)自然數(shù)例如 15,這個(gè)數(shù)字 15 能夠被 5 整除,這個(gè)時(shí)候我們就可以稱 5 是 15 的約數(shù),15 則是 5 的倍數(shù),這個(gè)知識(shí)點(diǎn)懂了吧?
👸小媛:哈哈哈,懂了,原來那么簡單。
🐰小C:那我們?cè)倏纯垂s數(shù)是什么。現(xiàn)在我們假設(shè)有兩個(gè)數(shù),一個(gè)是 15 一個(gè)是 30,他們兩者都可以被同樣的數(shù)字整除,例如 5、10、15,那么 5、10、15 這幾個(gè)數(shù)就是 15 與 30 的 公有 約數(shù),所以我們就稱為公約數(shù)。
👸小媛:唔,我懂了,我現(xiàn)在是要寫一道題目,需要用戶輸入兩個(gè)數(shù)字,然后判斷這兩個(gè)數(shù)的最大公約數(shù)和最小公約數(shù)。 😂
🐰小C:嗯,挺簡單的。你看 5、10、15 是 15 月 30 的公約數(shù),那么最大的公約數(shù)就是 15,最小的公約數(shù)就是 5了,簡單吧。
👸小媛:哈哈哈,簡單是簡單,那程序要怎么寫呢?
🐰小C:首先肯定是要用戶輸入兩個(gè)數(shù)吧?
👸小媛:是的。
🐰小C:那你就寫出來吧,如何接收用戶輸入并且存儲(chǔ)兩個(gè)變量的代碼。
👸小媛:嗯,寫好了,在下面。
int a,b; printf("請(qǐng)輸入兩個(gè)數(shù),并且使用空格間隔:"); scanf("%d%d", &a, &b);👸小媛:我創(chuàng)建了兩個(gè)變量,一個(gè)是 a 一個(gè)是 b,分別存儲(chǔ)用戶輸入的內(nèi)容,但是接下來我不懂怎么做了。
🐰小C:接下來也很簡單,但是我得先告訴你一個(gè)概念。例如有兩個(gè)數(shù),一個(gè)是 15 一個(gè)是 30,他們之間的公約數(shù)有哪些?
👸小媛:有 5 和 15。
🐰小C:最大公約數(shù)此時(shí)是 15,你發(fā)現(xiàn)了嗎?他們之間最大的公約數(shù),是不能超過 15 與 30 之間最小的那個(gè)數(shù)的。
👸小媛:真的嗎?
🐰小C:那我給你舉個(gè)例子吧,現(xiàn)在有兩個(gè)數(shù) 20 和 40,他們之間最大公約數(shù)是幾呢?
👸小媛:是 20 。
🐰小C:那 50 跟 100 呢?他們之間的最大公約數(shù)是幾呢?
👸小媛:最大公約數(shù)是 50,好像是真的耶,他們之間的最大公約數(shù)是不能超過求最大公約數(shù)的兩個(gè)數(shù)中最小的那一個(gè)。
🐰小C:因?yàn)閿?shù)值本身除本身就是 1,若你超過了那不就是小數(shù)了嗎?
👸小媛:哈哈哈,是這個(gè)理。 😋
🐰小C:所以接下來我們就很簡單的做了。編寫一個(gè)循環(huán),這個(gè)循環(huán)的循環(huán)變量等于求最大公約數(shù)中最小的一個(gè),此時(shí)循環(huán)變量只要每次減 1,循環(huán)的尋找最大公約數(shù)就可以了。
👸小媛:為什么要每次都減 1 呢?
🐰小C:就像 15 和 25 的最大公約數(shù) 5 一樣,必定是小于15 的,此時(shí)我們只需要從 15 遞減去尋找,那么肯定就會(huì)找得到這個(gè)值。
👸小媛:唔,懂了,所以代碼是不是應(yīng)該要寫成這樣?
#include<stdio.h> int main() {int a,b,i;printf("請(qǐng)輸入兩個(gè)數(shù),并且使用空格間隔:");scanf("%d%d", &a, &b);if(a>b){i=b;}else{i=a;}for(; i>0; i--){}return 0; }🐰小C:對(duì)的,你寫對(duì)咯。首先我們使用 if 語句,判斷輸入的值 a 與 b 哪一個(gè)比較小,如果 b 數(shù)值小的話就存儲(chǔ)到循環(huán)變量 i 中,否則 i 就是存儲(chǔ)變量 a 的內(nèi)容,此時(shí)通過 i 這個(gè)循環(huán)變量進(jìn)行遞減,就可以逐步的找到最大公約數(shù)了。但是你的代碼這里有點(diǎn)問題喲。
👸小媛:什么問題? 😱
🐰小C:就是你是否允許 a 數(shù)和 b 數(shù)兩者的值一樣呢?
👸小媛:嗯,不允許吧。對(duì)喲,我應(yīng)該加個(gè)判斷,不允許兩個(gè)數(shù)一致,我代碼改成這樣了,你看一下。
#include<stdio.h> int main() {int a,b,i;printf("請(qǐng)輸入兩個(gè)數(shù),并且使用空格間隔:");scanf("%d%d", &a, &b);if(a==b){printf("\n 兩個(gè)數(shù)不能相等");return 0;}if(a>b){i=b;}else{i=a;}for(; i>0; i--){}return 0; }👸小媛:結(jié)果也測(cè)試了。
🐰小C:嗯,你在用戶輸入數(shù)字后,判斷兩個(gè)數(shù)值是否相等,如果相等就使用 return 進(jìn)行程序跳出,不錯(cuò),是寫對(duì)了。現(xiàn)在開始添加判斷最大公約數(shù)的代碼吧,現(xiàn)在會(huì)了吧?
👸小媛:當(dāng)然會(huì)了,循環(huán)中添加這個(gè)代碼就可以了。
for(; i>0; i--){if(a%i==0 && b%i==0){printf("最大公約數(shù)是:%d\n", i);break;} }🐰小C:不錯(cuò),代碼是正確的,直接使用 if 語句判斷 a 數(shù)和 b 數(shù) 兩個(gè)數(shù)除循環(huán)變量 i ,如果都是除的斷那么這個(gè)循環(huán)變量 i 此時(shí)就是約束,如果是第一次找到這個(gè) i 除的斷那么就是最大公約數(shù),此時(shí)在 if 語句后添加一個(gè) break 直接跳出,那么就保證了此時(shí)找到數(shù)是最大公約數(shù)了。
👸小媛:那是,厲害吧,完整代碼在下面。
#include<stdio.h> int main() {int a,b,i;printf("請(qǐng)輸入兩個(gè)數(shù),并且使用空格間隔:");scanf("%d%d", &a, &b);if(a==b){printf("\n 兩個(gè)數(shù)不能相等");return 0;}if(a>b){i=b;}else{i=a;}for(; i>0; i--){if(a%i==0 && b%i==0){printf("最大公約數(shù)是:%d\n", i);break;}}return 0; }🐰小C:那我們舉一反三吧,最小公約數(shù)怎么求呢?
👸小媛:那就反過來,從 1 開始往上加,但是不能超過 a 數(shù)與 b 數(shù)中最小的那個(gè)數(shù),此時(shí)找到了就輸出,并且直接使用 break 進(jìn)行跳出,那么肯定就是最小公約數(shù)了;或者還有一種少改動(dòng)的方法,就是不用 break,新建一個(gè)變量,反正每次有約數(shù)就覆蓋掉之前的元素,這樣處理到最后一個(gè)肯定就是最小約數(shù)了,但是還有一個(gè)條件不能等于1,代碼寫出來了。 😎
#include<stdio.h> int main() {int a,b,i,min=0;printf("請(qǐng)輸入兩個(gè)數(shù),并且使用空格間隔:");scanf("%d%d", &a, &b);if(a==b){printf("\n 兩個(gè)數(shù)不能相等");return 0;}if(a>b){i=b;}else{i=a;}for(; i>0; i--){if(a%i==0 && b%i==0){if(i!=1){min=i;}}}printf("最小公約數(shù)是:%d\n", min);return 0; }🐰小C:行吧行吧,雖然效率不行但是你的腦子可以。
👸小媛:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。 👍
本專欄已參加 CSDN 蓄力計(jì)劃,感謝讀者支持。
總結(jié)
以上是生活随笔為你收集整理的【小白必懂】C语言最大、最小公约数题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【必懂】C语言水仙花数题解
- 下一篇: (7)3分钟搞定 C# 逻辑运算