## 版本1,普通的实现,没有调用任何第三方程序
## --------------------------------------------
#!/bin/bash
echo To calculate n!
echo -n n=
read nn
rad=10000
len=1
buffs[1]=1
for (( i=1; i <= nn; i++ )); do
let cc=0
for ((j=1; j<=len; j++)) ; do
let tt=buffs[j]*i+cc
let buffs[j]=tt%rad
let cc=tt/rad
done
if [ $cc -gt 0 ] ; then
let len=len+1
let buffs[len]=cc
fi
done
echo -n ${nn}!=${buffs[$len]}
for ((i=len-1; i>=1; i--)) ; do
echo -n `printf "%04d" ${buffs[$i]}`
done
echo
## 版本2,Linux bash的另一个实现
## 调用 bc来计算大数乘法,代码更简洁。
## 程序结构由2重循环变为单层循环,但是在每次循环中需要调用bc,tr命令,速度反而更慢些,代码见下:
## 当整数长度超过70个字符,bc的输出为多行格式,每行以\结尾,命令“tr -d ["\134\n\040"]”用来除去"\换行"和带来1个空格。
## --------------------------------------------------
#!/bin/bash
echo "calculate n!"
echo -n "n=?"
read n
r=1
for ((i=2; i <= n;i++)) ; do
r=`echo $r*$i | bc`
r=`echo $r | tr -d ["\134\n\040"]`
done
echo "$n!=$r"
计算大数阶乘--Linux Bash版
最新推荐文章于 2021-05-25 18:07:27 发布