Trending News
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"
最大公因數可以求了,但最小的還是不行
上面的不變。
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"
別人說是這樣子.....
最大公因數:用遞迴去跑輾轉相除法
最小公倍數:最大公因數 * 剩餘因數
可是我還是有個問題也…
如果在那加了b=$a的話,那我下面的while 裡的$a,就沒有這個數啦!那就不會做那一段啦!
3 Answers
- ?Lv 62 decades agoFavorite 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
所以你的考慮是多餘的。
- Anonymous2 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的啊!