linux shell求最大公约数,shell求最大公约数
1 #!/bin/bash
2 # gcd.sh: 最大公約數(shù)
3 #???????? 用Euclid運(yùn)算法則
4
5 #? 兩個(gè)整數(shù)的"最大公約數(shù)"
6 #+ 是能被這兩個(gè)整數(shù)整除的大最整數(shù).
7
8 #? Euclid運(yùn)算法則采用逐次除法.
9 #? 每一次都重新賦值,
10 #+ 被除數(shù)
11 #+ 除數(shù)?
12 #+ 直到 余數(shù) = 0.
13 #+ 最后被傳遞的值中:最大公約數(shù) = 被除數(shù).
14 #
15 #? 關(guān)于Euclid運(yùn)算法則的討論有一個(gè)出色的討論,
16 #? 訪問Jim Loy的網(wǎng)站, http://www.jimloy.com/number/euclids.htm.
17
18
19 # ------------------------------------------------------
20 # 參數(shù)檢查
21 ARGS=2
22 E_BADARGS=65
23
24 if [ $# -ne "$ARGS" ]
25 then
26?? echo "Usage: `basename $0` first-number second-number"
27?? exit $E_BADARGS
28 fi
29 # ------------------------------------------------------
30
31
32 gcd ()
33 {
34
35?? dividend=$1??????????????????? #? 隨意賦值.
36?? divisor=$2???????????????????? #+ 這里在兩個(gè)參數(shù)賦大的還是小的都沒有關(guān)系.
37????????????????????????????????? #? 為什么?
38
39?? remainder=1??????????????????? #? 如果在循環(huán)中使用未初始化的變量,
40????????????????????????????????? #+ 在循環(huán)中第一個(gè)傳遞值會(huì)使它返回一個(gè)錯(cuò)誤信息
41????????????????????????????????? #
42
43?? until [ "$remainder" -eq 0 ]
44?? do
45???? let "remainder = $dividend % $divisor"
46???? dividend=$divisor??????????? # 現(xiàn)在用最小的兩個(gè)數(shù)字來重復(fù).
47???? divisor=$remainder
48?? done?????????????????????????? # Euclid運(yùn)算法則
49
50 }??????????????????????????????? # 最后的$dividend變量值就是最大公約數(shù).
51
52
53 gcd $1 $2
54
55 echo; echo "GCD of $1 and $2 = $dividend"; echo
56
57
58 # 練習(xí):
59 # --------
60 #? 檢測(cè)命令行參數(shù)以確保它們是整數(shù),
61 #+ 如果不是整數(shù)則給出一個(gè)適當(dāng)?shù)腻e(cuò)誤信息并退出腳本.
62
63 exit 0
總結(jié)
以上是生活随笔為你收集整理的linux shell求最大公约数,shell求最大公约数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四十九章
- 下一篇: 《大道至简》的幕后故事(3):“愚公移山