两个数字之间所有整数的总和

Atu*_*mRe 4 shell-script variable

我想输入两个数字并获得这两个数字之间所有整数的总和,包括。

例如:

./sum1 2 5
Run Code Online (Sandbox Code Playgroud)

应该屈服

sum: 14
Run Code Online (Sandbox Code Playgroud)

因为 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"
Run Code Online (Sandbox Code Playgroud)

我想我需要在那里添加另一个变量,但我似乎找不到一个好的解决方案。

Sté*_*las 13

如果您有seq命令,则使用蛮力方法:

$ seq 2 5 | paste -sd + - | bc
14
Run Code Online (Sandbox Code Playgroud)

所以作为一个函数:

sum() { seq "$@" | paste -sd + - | bc; }
Run Code Online (Sandbox Code Playgroud)

更聪明的方法:

sum() { echo "$((($1+$2)*($2-$1+1)/2))"; }
Run Code Online (Sandbox Code Playgroud)

或者要获得bc的精度:

sum() { echo "($1+$2)*($2-$1+1)/2" | bc; }
Run Code Online (Sandbox Code Playgroud)

这个想法是计算:

2+3+4+5
Run Code Online (Sandbox Code Playgroud)

如果你加倍,你可以写:

 2+3+4+5
+5+4+3+2
 ???????
 7+7+7+7
Run Code Online (Sandbox Code Playgroud)

所以你的总和 ( 2 * s) 的两倍是 4 ( b - a + 1) 乘以7( a + b)。

2 * s = (b - a + 1) * (a + b)
Run Code Online (Sandbox Code Playgroud)

所以

s = (b - a + 1) * (a + b) / 2
Run Code Online (Sandbox Code Playgroud)