Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391329
  • 博文数量: 146
  • 博客积分: 7142
  • 博客等级: 少将
  • 技术积分: 975
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-03 09:43
文章分类

全部博文(146)

文章存档

2012年(1)

2011年(5)

2010年(24)

2009年(116)

我的朋友

分类:

2009-12-24 22:39:43

################################Start
Script#######################################
1 #!/bin/bash
2 # gcd.sh: 最大公约数
3 # 使用Euclid's 算法
4
5 # 最大公约数,就是2 个数能够同时整除的最大的数.
6 #
7
8 # Euclid's 算法采用连续除法.
9 # 在每个循环中
10 #+ 被除数 <--- 除数
11 #+ 除数 <--- 余数
12 #+ 直到余数= 0.
13 #+ 在最后的循环中The gcd = 被除数
14 #
15 # 关于这个算法更精彩的讨论
16 # 见Jim Loy's site, .
17
18
19 # ------------------------------------------------------
20 # 参数检查
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 #+ 即使$2 大,也没关系.
37 # Why not?
38
39 remainder=1 # 如果再循环中使用为初始化的变量.
40 #+ 那将在第一次循环中产生一个错误消息.
41
42
43 until [ "$remainder" -eq 0 ]
44 do
45 let "remainder = $dividend % $divisor"
46 dividend=$divisor # 现在使用2 个最小的数重复.
47 divisor=$remainder
48 done # Euclid's algorithm
49
50 } # Last $dividend is the gcd.
50 } # 最后的$dividend 就是gcd.
51
52
53 gcd $1 $2
54
55 echo; echo "GCD of $1 and $2 = $dividend"; echo
56
57
58 # 练习:
59 # --------
60 # 检查命令行参数来确定它们都是整数,
61 #+ and exit the script with an appropriate error message if not.
61 #+ 否则就选择合适的错误消息退出.
62
63 exit 0
################################End
Script#########################################
阅读(980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~