2つの数字の間のすべての整数の合計

2つの数字の間のすべての整数の合計

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 * s4(b - a + 1)倍7a + b)です。

2 * s = (b - a + 1) * (a + b)

だから

s = (b - a + 1) * (a + b) / 2

おすすめ記事