【shell 指令碼】求最大公約數

楊奇龍發表於2011-03-20
====== gcd.sh======
 #!/bin/bash
 # gcd.sh: 最大公約數
 #         使用Euclid的演算法
 
 #  兩個整數的"最大公約數" (gcd),
 #+ 就是兩個整數所能夠同時整除的最大的數.
 
 #  Euclid演算法採用連續除法.
 #  在每一次迴圈中,
 #+ 被除數  #+ 除數  #+ 直到 餘數 = 0.
 #+ 在最後一次迴圈中, gcd = 被除數.
 #
# ------------------------------------------------------
 # 引數檢查
 ARGS=2
 E_BADARGS=65
 
 if [ $# -ne "$ARGS" ]
 then
   echo "Usage: `basename $0` first-number second-number"
   exit $E_BADARGS
 fi
 # ------------------------------------------------------
 
 
function gcd ()
 {
 
   dividend=$1                    #  隨意賦值.
   divisor=$2                     #+ 在這裡, 哪個值給的大都沒關係.
                                  #  為什麼沒關係?
 
   remainder=1                    #  如果在迴圈中使用了未初始化的變數,
                                  #+ 那麼在第一次迴圈中,
                                  #+ 它將會產生一個錯誤訊息.
 
   until [ "$remainder" -eq 0 ]
   do
     let "remainder = $dividend % $divisor"
     dividend=$divisor            # 現在使用兩個最小的數來重複.
     divisor=$remainder
   done                           # Euclid的演算法
 
 }                                # Last $dividend is the gcd.
 
 gcd $1 $2
 echo; echo "GCD of $1 and $2 = $dividend"; echo
 
 
 # Exercise :
 # --------
 #  檢查傳遞進來的命令列引數來確保它們都是整數.
 #+ 如果不是整數, 那就給出一個適當的錯誤訊息並退出指令碼
=======測試=======
root@client.example.com ~/yang # ./gcd.sh
Usage: gcd.sh first-number second-number
root@client.example.com ~/yang # ./gcd.sh  55 3

GCD of 55 and 3 = 1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-690018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章