《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数
本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅
#!/bin/bash
#求两个整数的最大公约数
E_BADARGS=
#如果参数个数不为2,以参数错误退出
]
then
echo "Usage: `basename $0` first-number second-number"
exit $E_BADARGS
fi
#如果参数非整数或参数值为0,以参数错误退出
for i in $@
do
-]+ ] #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
then
]
then
echo "Usage: `basename $0` parameter can't be zero"
exit $E_BADARGS
fi
else
echo "Usage: `basename $0` parameter must be integer"
exit $E_BADARGS
fi
done
#设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
gcd()
{
remainder=
dividend=$
divisor=$
]
do
let "remainder=$dividend % $divisor"
dividend=$divisor
divisor=$remainder
done
}
gcd $ $
echo "gcd of $1 and $2 is: $devidend"
exit
在改编这个脚本的时候,我的考虑点主要有以下:
1. 所传的参数是不是要排除非整数的情况?
非整数的情况第一次我用echo $i | sed '/s/^[0-9]*$/''/g' && echo $?来排除,如果第一条命令正确执行,$?应该返回0,但是我们有更好的方法,即“=~"后面跟正则的方式
2. 参数值为0的情况是不是要排除在外?
在判断$i为整数的判断下再嵌套一个判断[ $i -eq 0 ]
3. 参数个数怎么控制?
[ $# -eq 2 ]或[ $# -ne 2 ]就可以排除空参数或参数个数不为2
4. 欧几里德算法中对于$1<$2的情况的处理?
先看$1>$2的情况
$1=65 $2=15
第一个循环:5=65 % 15
dividend=15
divisor=5
第二次循环 0=15%5
dividend=5
divisor=0
退出循环,gcd=$dividend=5
再看$1<$2的情况
$1=15 $2=65
第一次循环:15=15 % 65
dividend=65
divisor=15
第二次循环:5=65 % 15
dividend=15
divisor=5
第三次循环:0=15 % 5
dividend=5
divisor=0
退出循环,gcd=$dividend=5
可知$1<$2的情况比$1>$2的情况多了一个循环,结果是一样的
《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数的更多相关文章
- c 求两个整数的最大公约数和最小公倍数
//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...
- 求两个整数的最大公约数GCM
思路分析: (1)求差判定法: 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数 ...
- php取两个整数的最大公约数算法大全
php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数
程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...
- Scala学习十九——解析
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...
- Spring学习(十九)----- Spring的五种事务配置详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Python3.5 学习十九 Django分模块讲解 MTV+URL
本节内容概述: 表单提交的Method使用规则:get 获取数据 post提交数据 单选使用get 多选使用getlist request.POST.getlist("favor" ...
- Spring学习(十九)----- Spring与WEB容器整合
首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> ...
随机推荐
- 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询
查看表相关命令 - 查看表结构 desc 表名- 查看生成表的SQL show create table 表名- 查看索引 show index from 表名 使用索引和不使用索引 由 ...
- 用户(user)和用户组(group)相关的配置文件、命令或目录;
1.与用户(user)和用户组(group)相关的配置文件: 1)与用户(user)相关的配置文件:/etc/passwd 注:用户(user)的配置文件:/etc/shadow 注:用户(user) ...
- Zookeeper配置说明
转载自:https://my.oschina.net/u/2338362/blog/399361 Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进 ...
- ZFIR_001 ole下载
*&---------------------------------------------------------------------** Report ZFIR_001* Appli ...
- ORA-00001:unique constraint violated 以及 Incorrect result size: expected 1, actual 0
往数据库中插入数据时报错: www.2cto.com ORA-00001: unique constraint (IDX_CARTON_HEADER)violated. 即往CARTON_ ...
- 希望and目标
软件工程是一门枯燥的课程,这门课我不喜欢上,容易犯困,但就因为如此.我不得不好好的学习,我希望在这门课上.我能将基础学扎实,在实践上可以自己慢慢研究,我的目标不是很远大,学好.学扎实..在这门课上一周 ...
- 混淆Android JAR包的方法
http://blog.csdn.net/vurtne_ye/article/details/35599491 1)导出jar包 如何在eclipse上Android工程中导出jar包?google, ...
- linux ip别名和辅助ip地址
转:https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao&utm_medium=referral ...
- yield 表达式形式的应用
import random foods=['banana','apple','peach','grape','pear'] def deco(func): def wrapper(*args,**kw ...
- 黑色CSS3立体动画菜单
在线演示 本地下载