Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 2 decades ago

shell script 的語法,那裡錯了…

我們要寫輸入兩個數字,求最大公因數和最小公倍數

下面是我寫的,但是他while那一段都說找不到也。該怎麼辦?

我寫的很爛,可能錯誤一堆吧!

希望可以幫我解決這個問題

#!/bin/bash

echo -e "num1=? and num2=?"

read num1

read num2

echo "num1=$num1,num2=$num2"

declare -i a=$(($num1 % $num2))

while ["$a" != "0"]

do

declare -i temp=$a

$num1=$num2

$num2=$temp

done

echo "gcd=$a"

declare -i b=$((num1*num2/$a))

echo "lcm=$b"

Update:

最大公因數可以求了,但最小的還是不行

上面的不變。

while [ $a -ne 0 ]

do

num1=$num2

num2=$a

a=$(($num1%num2))

done

echo "gcd=$num2"

declare -i b=$(($num1*$num2/$a))

echo "lcm=$b"

Update 2:

別人說是這樣子.....

最大公因數:用遞迴去跑輾轉相除法

最小公倍數:最大公因數 * 剩餘因數

Update 3:

可是我還是有個問題也…

如果在那加了b=$a的話,那我下面的while 裡的$a,就沒有這個數啦!那就不會做那一段啦!

3 Answers

Rating
  • ?
    Lv 6
    2 decades ago
    Favorite Answer

    #!/bin/bash

    echo -e "num1=? and num2=?"

    read num1

    read num2

    echo "num1=$num1,num2=$num2"

    declare -i a=$(($num1 % $num2))

    ####################################

    ##我在這裡加了這一行喔 ##

    ##因為你的$a在底下while裡面會被清空 ##

    ##所以要在清空前 用另外一個變數記住##

    b=$a

    ####################################

    while [ $a -ne 0 ]

    do

    num1=$num2

    num2=$a

    a=$(($num1%num2))

    done

    echo "gcd=$num2"

    ##這時候用剛剛偷記的$b來當除數就可以了

    declare -i b=$(($num1 * $num2 / $b))

    echo "lcm=$b"

    ====================================

    while裡面的$a 並不會因為b=$a被取消啊。

    b=$a就相當是多複製一份$a 只是取名叫做$b

    所以你的考慮是多餘的。

  • Anonymous
    2 decades ago

    num1,num2是我自已輸入的兩個數,a是num1除以num2的餘數,如果餘數不等於0的話,就做while的指令,num2的值取代num1的值,再把a的值取代num2,再去相除。最大公因數就是num2了,然後最小公倍數就是輸入的兩個數字相乘再去除以餘數(這行我也不知為什麼要這麼做,我是在網路的c程式,我把它改成shell script語法的。)但是最後餘數要不等於0的那個餘數才可以算出最小公倍數,像我這個餘數就是0,就算不出來了。這樣講不知你懂不懂。不然你可以用兩個數字來求,應該懂我講的吧!

    如果會的話,幫我解一下要怎樣求最小公倍數啊!

    2005-11-10 22:06:47 補充:

    我在想啊~~~是不是也要用到if…else的啊!

  • Lv 7
    2 decades ago

    請問你能講解一下你取最大公因數和最小公倍數用的方法嗎?

Still have questions? Get your answers by asking now.