shell求最大公约数

xiaoxiao2026-06-07  3

1 #!/bin/bash 2 # gcd.sh: 最大公约数 3 # 用Euclid运算法则 4 5 # 两个整数的"最大公约数" 6 #+ 是能被这两个整数整除的大最整数. 7 8 # Euclid运算法则采用逐次除法. 9 # 每一次都重新赋值, 10 #+ 被除数 <--- 除数 11 #+ 除数 <--- 余数 12 #+ 直到 余数 = 0. 13 #+ 最后被传递的值中:最大公约数 = 被除数. 14 # 15 # 关于Euclid运算法则的讨论有一个出色的讨论, 16 # 访问Jim Loy的网站, http://www.jimloy.com/number/euclids.htm. 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 #+ 这里在两个参数赋大的还是小的都没有关系. 37 # 为什么? 38 39 remainder=1 # 如果在循环中使用未初始化的变量, 40 #+ 在循环中第一个传递值会使它返回一个错误信息 41 # 42 43 until [ "$remainder" -eq 0 ] 44 do 45 let "remainder = $dividend % $divisor" 46 dividend=$divisor # 现在用最小的两个数字来重复. 47 divisor=$remainder 48 done # Euclid运算法则 49 50 } # 最后的$dividend变量值就是最大公约数. 51 52 53 gcd $1 $2 54 55 echo; echo "GCD of $1 and $2 = $dividend"; echo 56 57 58 # 练习: 59 # -------- 60 # 检测命令行参数以确保它们是整数, 61 #+ 如果不是整数则给出一个适当的错误信息并退出脚本. 62 63 exit 0
转载请注明原文地址: https://www.6miu.com/read-5049755.html

最新回复(0)