C語言用短除法求數的最小公倍數,程式沒有語法錯誤,和書上的一模一樣,但是執行不出結果?求大神

時間 2021-08-11 17:21:04

1樓:

解:程式的思路錯了,錯在:t=t*i。

按照程式的思路是:現求出3個數中最大的數,這個最大的數作為出for迴圈的條件,而for迴圈的功能是:找出所有能被那3個數整除的數(不是要求同時被那3個數整除);而while迴圈結束後,執行下一句:

x0=max(x1,x2,x3); ,是重新找出那3個數中最大的數,因為經過了3個if語句中:x1=x1/i;x2=x2/i;x3=x3/i;後,x1、x2、x3的值都可能發生了改變,到最後把找到的所有i的值都相乘,即最大公倍數。

那我們假設那3個數是:3、8、9

因為9最大,此時x0=9。

當i=2時,經過while時,這3個數變成:3、4、9,此時還是9最大,while時結束後,經過這句:x0=max(x1,x2,x3); 後,那麼此時x0=9。

當i=3時,經過while時,這3個數變成:1、4、3,此時最大的數為4,while時結束後,經過這句:x0=max(x1,x2,x3); 後,那麼此時x0=4。

當i=4時,經過while時,這3個數變成:1、1、3,此時最大的數為3,while時結束後,經過這句:x0=max(x1,x2,x3); 後,那麼此時x0=3。

接下來for迴圈結束了,因為這句:i<=x0;,4比3大,for迴圈不執行了。

那麼經過t=t*i後得:2x3x4=24,顯然不是最小公倍數,思路也是錯在這裡。

綜上得出本人的修改結果:t=t*i; 這句保留,在for迴圈結束後,加上這句:t=t*x1*x2*x3;即可。也就是:假設中的:24x1x1x3=72。

2樓:匿名使用者

沒執行你的程式,不過這兩個地方是有問題的:while(flag=1) if (flag=1)

c語言求最小公倍數,c語言求最小公倍數

一生何求 1 首先介紹一下求最小公倍數的經典方法 輾轉相除法 有兩整數a和b a b得餘數c 若c 0,則b即為兩數的最大公約數 若c 0,則a b,b c,再回去執行 a b除以最大公約數 等於最小公倍數 2 因此原問題也化為最小公倍數和最大公約數一起求了。程式的演算法如下 include int...

用短除法求出59和15的最小公倍數

暴走少女 最小公倍數是3x5x1x3x1 45,如下圖 短除符號就是除號倒過來。短除就是在除法中寫除數的地方寫兩個數共有的質因數,然後落下兩個數被公有質因數整除的商,之後再除,以此類推,直到結果互質為止 兩個數互質 而在用短除計算公倍數數時,對其中任意兩個數存在的因數都要算出,其它沒有這個因數的數則...

c 求最小公倍數,C 多個數求最小公倍數

沒那麼簡單,除了2,還有更大的因子呢?15和9都是奇數,也不能整除,但135不是他們的最小公倍數哦你得排除所有的可能 其實求最小公倍速,等價於求最大公約數 m n 肯定是m n的公倍數,但是不是最小,就要看m和n裡面有沒有共同的因子 如果我們找出m n的最大的共同因子a,即他們的最大公約數那麼m n...