计算大数阶乘--Linux Bash版

## 版本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"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值