題目
輸入兩個(gè)整數(shù),求這兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。
?我們先來講最大公約數(shù)
第一種求法(輾轉(zhuǎn)相除法)這個(gè)方法代碼較潔簡,我也比較推薦就是剛開始有點(diǎn)比較難了解。
首先,來看看怎么求最大公約數(shù),求最大公約數(shù)需要用到歐幾里得算法,也稱為輾轉(zhuǎn)相除法。算法就是用兩數(shù)中較大的數(shù)a除以另一個(gè)數(shù)b得出余數(shù)c,然后判斷c是否為0(意思a能夠整除b),為0則b為最大公因數(shù);反之,則把b作為a,c作為b,繼續(xù)上面的操作,直至余數(shù)為0.
翻譯一下,用個(gè)簡單的代碼輸入輸出解釋一下:
輸入18 24? (這里本來要比較兩數(shù)的大小,然后直接公式得到,但也可以省去比大小,用循環(huán))
第一次循環(huán)
a = 18? ? b = 24? ? c = a%b = 18%24 = 18?
然后將a=b? ? b=c? ? (結(jié)合第二次循環(huán),可以得出我們不需要比大小,第一次小除大,會(huì)兩值不會(huì)變,但位置反,可以直接用)
a = 24? ? b=18
第二次循環(huán)
a = 24? ? b = 18? ? c = a%b = 24%18 = 6?
然后將結(jié)果a = b? ? b =c
a =18? ? ?b=6? ? (可以靜下心來感受一下這里面值相對(duì)大小的改變)
?第三次循環(huán)
a = 18? ? b = 6? ? ?c = a%b = 18%6 = 0
c的結(jié)果等于0時(shí)循環(huán)結(jié)束。
?代碼如下
#include <stdio.h>
int main()
{
? ? int m = 0;
? ? int n = 0;
? ? int temp = 0;
? ??
? ? scanf("%d %d", &m, &n);//兩個(gè)整數(shù)? ? while (tmp = m % n)//循環(huán),大小不對(duì),自動(dòng)換位置。
? ? {
? ? ? ? m = n;
? ? ? ? n = temp;
? ? }
? ? printf("最大公約數(shù)為:%d\n", n);
? ? return 0;
}
還有一個(gè)最直接的辦法,將所有的情況都舉出來。
思路:
兩種情況討論
1.如果大數(shù)可以整除小數(shù),那么最大公約數(shù)為小數(shù)。
2.如果不能整除小數(shù),那就找一個(gè)比較大,但時(shí)小于較小的數(shù),能被兩數(shù)同時(shí)整除的數(shù)。
代碼如下:?
#include<stdio.h>
int main(){
?? ?int a = 0;
?? ?int b = 0;
?? ?printf("請(qǐng)輸入兩個(gè)整數(shù):");
?? ?scanf("%d%d", &a, &b);
?? ?if (a >= b){
?? ??? ?int i = 0;
?? ??? ?for (i = b; i >= 1; i--)????????{
?? ??? ??? ?if (a%i == 0 && b%i == 0)????????????????{
?? ??? ??? ??? ?printf("最大公約數(shù)為:%d\n", i);
?? ??? ??? ??? ?break;
????????????????}
????????}
}
?? ?else{
?? ??? ?int j = 0;
?? ??? ?for (j = a; j >= 1; j--)????????{
?? ??? ??? ?if (a%j == 0 && b%j == 0)????????????????{
?? ??? ??? ??? ?printf("最大公約數(shù)為:%d\n", j);
?? ??? ??? ??? ?break;
? ??????????????}
? ? ? ? ?}
?}
?? ?return 0;
}
?求完最大公約數(shù),接下來求最小公倍數(shù)
根據(jù)公式法,我們可以知道兩數(shù)a和b的乘積等于它們的最大公約數(shù)和最小公倍數(shù)的積,所以最小公倍數(shù)可以通過最大公約數(shù)來求。
因?yàn)樯厦嬉呀?jīng)求完最大公約數(shù),所以可以直接用兩數(shù)相乘然后除最大公約數(shù)
代碼如下
#include<stdio.h>
int main()
{
?? ?int a, b, c, d;
?? ?
?? ?scanf("%d %d %d", &a, &b,%c);//a,b為數(shù),c為最大公約數(shù);
?? ??
?? ?d = a * b / c;
?? ?
?? ?printf("%d",c);
?}?文章來源:http://www.zghlxwxcb.cn/news/detail-440393.html
謝謝大家的觀看!?文章來源地址http://www.zghlxwxcb.cn/news/detail-440393.html
到了這里,關(guān)于【C語言】兩個(gè)整數(shù)最大公約數(shù)和最小公倍數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!