首页 > 解决方案 > 如何使用shell脚本获得所有奇数的乘积直到n

问题描述

我试图让所有奇数的乘积达到 n。但输出始终为 0。

read -p "Enter a number: " n

prod=0

for((k=1; k<=n; k++))
do
    if [ k%1==0 ]
    then
        prod=$((prod*=k))
    fi
done

echo "Product of odd counting numbers until $n is $prod"

标签: bashshell

解决方案


对于此任务,模运算是多余的。for只需使用增量为 2的 C 样式循环:

#!/bin/bash

read -p "Enter a number: " n
prod=1
for ((k = 3; k <= n; k += 2)); do ((prod *= k)); done
echo "Product of odd counting numbers until $n is $prod"

请注意,产品很容易溢出。例如,在 64 位系统上,whenn等于或大于 35。如果您想要更大ns 的正确结果,您可能需要使用该bc实用程序:

#!/bin/bash

read -p "Enter a number: " n
prod=1
for ((k = 3; k <= n; k += 2)); do prod+="*$k"; done
printf "Product of odd counting numbers until %d is " "$n"
bc <<< "$prod"

请注意,在这种情况下,prod+="*$k"是字符串连接,而不是算术运算。


推荐阅读