wha*_*ife 2 bash shell-script variable
这个特定的 while 循环承认它只适用于 20 号。在那之后,它开始给出错误的答案,但我不知道为什么。
#!/bin/bash
n=$1
[ "$n" == "" ] && echo Please give a number and try again && exit
factorial=1 ; j=1
while [ $j -le $n ]
do
factorial=$(( $factorial * $j ))
j=$(( $j + 1 ))
done
echo The factorial of $n, "$n"'!' = $factorial
exit 0
Run Code Online (Sandbox Code Playgroud)
如果你给出 21 作为参数,你会得到:-4249290049419214848。这可能是一个bash问题吗?我尝试进行下面的阶乘计算,但得到了同样糟糕的答案。答案应该是:51090942171709440000
echo $(( 2432902008176640000 * 21 ))
Run Code Online (Sandbox Code Playgroud)
don*_*l24 11
Bash 在大多数系统上使用有符号的 64 位整数。您将需要另一个工具bc来超越它。
这意味着使用 bash 您可以拥有的最大数量是2^63-1, 等于9,223,372,036,854,775,807并且您超过了这个数字:
awk 'BEGIN{print 2432902008176640000 * 21}'
51090942171709440000 #--> 51,090,942,171,709,440,000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |