bash는 큰 숫자를 정수로 인식하지 못합니까?

bash는 큰 숫자를 정수로 인식하지 못합니까?

그래서 저는 숫자의 각 숫자의 합과 다른 숫자의 거듭제곱을 인쇄하는 스크립트를 작성하려고 합니다.

예를 들어 입력이 다음과 같은 경우 script 123 2스크립트는 를 계산 1^2 + 2^2 + 3^2하고 출력합니다 14.

내 스크립트:

Num=$1
s=0
while [ $Num -gt 0 ]
do
   k=$(( $Num % 10 ))

   Num=$(( $Num / 10 ))

   s=$(( $s + ($k**$2)))
done
echo $s

이는 작은 숫자에서는 잘 작동하지만 "3706907995955475988644381"과 같은 숫자에서는 다음 오류가 발생합니다.line 5: [: 3706907995955475988644381: integer expression expected

이 스크립트가 큰 숫자를 처리하도록 하려면 어떻게 해야 합니까?

답변1

입력을 문자열로 처리하고 길이를 계산하며 하위 문자열 인수 확장을 사용하여 개별 숫자를 추출할 수 있습니다.

Num=$1
Exp=$2
s=0
# string length
i=${#Num}
while [ $i -gt 0 ]
do
   # index is 0-based, decrement before using
   : $((i--))
   # 1 character at index i
   k=${Num:$i:1}

   s=$(( $s + ($k**$Exp)))
done
echo $s

노트:코드에 오류 처리가 부족합니다. 입력 내용에 숫자가 아닌 문자가 포함되어 있으면 예상치 못한 결과가 나올 수 있으며 계산이 오버플로될 수 있습니다.매우긴 숫자.

관련 정보