Amm*_*mmu 0 linux bash shell-script
这是我的 bash 脚本计算阶乘的代码
read -p "Please enter the number " number
while ([ $number -gt 0 ])
do
factorial=1
for ((i=$number;i > 0;i--))
do
factorial=$((factorial * $i))
done
echo "The factorial of the " $number " is " $factorial
number=$((number - 1))
done
Run Code Online (Sandbox Code Playgroud)
这将打印出从 {input:1} 范围内的所有数字的阶乘,除了少数的阶乘之外,一切看起来都正确。输出如下。

如您所见,某些数字的阶乘是负值。我从在线论坛了解到 bash 脚本在计算较大数字的阶乘时通常会中断,但就我可以在线挖掘而言,这些负值似乎并不常见。如果有人可以解释其原因,它将对我的学习有很大帮助。谢谢!
bash 算法是在有符号的 64 位整数上完成的,所以最大数字是:
$ max=$(( (1<<63) - 1 )); echo "$max"
9 223 372 036 854 775 807
Run Code Online (Sandbox Code Playgroud)
如果你检查它,你会从相反的范围开始,即负数。
$ echo $(( $max + 1 ))
-9 223 372 036 854 775 808
Run Code Online (Sandbox Code Playgroud)
这与在 C 语言中管理整数溢出完全一样。
对于阶乘,20!仍然低于它,但不是21!
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |