그래서 저는 숫자의 각 숫자의 합과 다른 숫자의 거듭제곱을 인쇄하는 스크립트를 작성하려고 합니다.
예를 들어 입력이 다음과 같은 경우 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
노트:코드에 오류 처리가 부족합니다. 입력 내용에 숫자가 아닌 문자가 포함되어 있으면 예상치 못한 결과가 나올 수 있으며 계산이 오버플로될 수 있습니다.매우긴 숫자.