2つの数字を入力して、これら2つの数字の間のすべての整数の合計を求めたいと思います。
たとえば、
./sum1 2 5
生産しなければならない
sum: 14
なぜなら2+3+4+5=14だからです。
これが私が今まで持っているものです:
read num1 num2
for (( i=$num1; i<=$num2; i++))
do
now how to do what i want
done
echo "The Sum of your two number and the numbers inbetween is:$i"
そこに他の変数を追加する必要があるようですが、良い解決策が見つからないようです。
ベストアンサー1
コマンドがある場合は、seq
無差別アプローチを使用できます。
$ seq 2 5 | paste -sd + - | bc
14
だから関数として:
sum() { seq "$@" | paste -sd + - | bc; }
よりスマートな方法:
sum() { echo "$((($1+$2)*($2-$1+1)/2))"; }
またはbc
得られた正確さ:
sum() { echo "($1+$2)*($2-$1+1)/2" | bc; }
アイデアは、以下を計算することです。
2+3+4+5
倍にすると、次のように書くことができます。
2+3+4+5
+5+4+3+2
───────
7+7+7+7
したがって、2倍()の合計は2 * s
4(b - a + 1
)倍7
(a + b
)です。
2 * s = (b - a + 1) * (a + b)
だから
s = (b - a + 1) * (a + b) / 2