두 숫자 사이의 모든 정수의 합

두 숫자 사이의 모든 정수의 합

두 숫자를 입력하고 이 두 숫자 사이(포함)의 모든 정수의 합을 구하고 싶습니다.

예를 들어:

./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 * s4( b - a + 1) 배 7( a + b)입니다.

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

그래서

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

답변2

찾다"산술 평가"쉘 문서에서. 예를 들어 BASH에서는 다음과 같을 수 있습니다.

n=0
for (( i = $num1; i <= $num2; i++)); do
    (( n += i ))
done
echo $n

일반적으로 자주 사용할 계획이라면 독립형 스크립트보다는 함수로 사용하는 것이 좋습니다. 산술 평가를 제공하는 일부 쉘에서는 (( n = n + i ))단축 +=연산자를 사용하지 못할 수 있으므로 이를 사용하는 것이 더 적절할 수 있습니다 .

답변3

왜 자전거를 타나요?

read x y
echo $(( (y - x) * (y - x + 1) / 2 + (y - x + 1) * x ))

순수한 쉘에서는 다음이 필요합니다.$(( ))

답변4

위에서 언급했듯이 등차수열의 합은 다음과 같은 공식을 갖습니다.

합계 공식

더보기(증명 및 소개)위키피디아 기사.

관련 정보