*********************************************************************************

導(dǎo)言:本人也是一位小白,有錯(cuò)誤的地方請(qǐng)各位大佬指出,我便修改,這是我的第一篇博客寫(xiě)得不好請(qǐng)見(jiàn)諒。
下面介紹兩種方法->
*********************************************************************************
代碼如下:
#include#include//system("pause");的頭文件
int main ()
{
int i = 0, j = 0;
int temp = 0;
printf("請(qǐng)輸入兩個(gè)正整數(shù):>");
scanf("%d,%d",&i,&j);
if(i >j)
{
temp = j;
}
else
{
temp = i;
}
for(temp; temp>0; temp--)
{
if(((i % temp) == 0) && ((j % temp) ==0))
{
printf("大公約數(shù)是:%d\n",temp);
break;
}
}
system("pause");//卡住生成的窗口方便觀察結(jié)果
return 0;
} 此方法的原理:將輸入的兩個(gè)數(shù)中較小的一個(gè)數(shù)給到一個(gè)中間變量用作for循環(huán),以此來(lái)自減,在減的過(guò)程中會(huì)把這個(gè)數(shù)拿給輸入時(shí)的兩個(gè)數(shù)進(jìn)行取余運(yùn)算,若輸入時(shí)的數(shù)均取余得到0就說(shuō)明此時(shí)的中間變量的值就是輸入的兩個(gè)數(shù)的大公約數(shù)。(因?yàn)檩^小的那個(gè)數(shù)自減的話比較大的那個(gè)數(shù)提高了效率,大公約數(shù)顧名思義是輸入兩個(gè)正整數(shù)均所能整除的大數(shù))
當(dāng)然這樣的代碼很是繁瑣,看起來(lái)一大堆,所以為大家準(zhǔn)備了第二種方法。
第二種方法也是大家上學(xué)時(shí)學(xué)過(guò)的“歐幾里得算法”也就是輾轉(zhuǎn)相除法,這屬于算法的一種了。
先解釋一下原理吧:
輾轉(zhuǎn)相除法原理:先輸入a和b進(jìn)行取余(a%b,不管先后順序),若為0則說(shuō)明a和b的大公約數(shù)為b;若不為0則繼續(xù)把b的值賦值給a,把前面取余得到的數(shù)賦值給b,然后繼續(xù)取余判斷a和b(a%b,不管先后順序)是否等于0,若為0則說(shuō)明大公約數(shù)就是b的值,若不為0則繼續(xù)把b的值賦值給a,把前面取余的數(shù)賦值給b,然后繼續(xù)判斷a和b取余(a%b,不管先后順序)看是否等于0,如此循環(huán)。直到a%b==0了就說(shuō)明b為a與b之間的大公約數(shù)。
前面說(shuō)到”減一法“的代碼比較繁瑣而這里卻更繁瑣,這里時(shí)為了大家更好的理解,下面會(huì)有優(yōu)化的代碼的,請(qǐng)各位看官稍安勿躁哦!
代碼如下:
#include#include//system("pause");的頭文件
int main ()
{
int i = 0, j = 0;
int min = 0;
int max =0;
printf("請(qǐng)輸入兩個(gè)正整數(shù):>");
scanf("%d,%d",&i,&j);
if(i >j)
{
min = j;
max = i;
}
else
{
min = i;
max = j;
}
while(1)
{
if((max % min) == 0)
{
printf("大公約數(shù)是:>%d\n",min);
break;
}
else
{
int num = min;
min = max % min;
max = num;
}
}
system("pause");//卡住生成的窗口方便觀察結(jié)果
return 0;
} 注意:輾轉(zhuǎn)相除法不需要把更大的數(shù)放前面,因?yàn)樵摲椒ň邆洹白詣?dòng)”把大的數(shù)換到前面去。
既然說(shuō)到了可以不論順序,所以我們吧這算法優(yōu)化一下
#include#include//system("pause");的頭文件
int main ()
{
int i = 0, j = 0;
int num =0;
printf("請(qǐng)輸入兩個(gè)正整數(shù):>");
scanf("%d,%d",&i,&j);
while(num=(i%j))
{
i = j;
j = num;
}
printf("大公約數(shù)是:%d\n",j);
system("pause");//卡住生成的窗口方便觀察結(jié)果
return 0;
} 這里就很簡(jiǎn)潔啦,相信大家也理解得差不多了吧!!!
我把代碼運(yùn)行輸出一下吧!
最后希望大家指出我的問(wèn)題!
謝謝各位看官的光臨,點(diǎn)點(diǎn)贊吧!!!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)標(biāo)題:【C語(yǔ)言】:輸入兩個(gè)正整數(shù)并找出它們的最大公約數(shù)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://chinadenli.net/article26/gcgjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、小程序開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容