所以我试图编写一个脚本来打印一个数字中每个数字的总和,以及另一个数字的幂。
例如,如果输入是: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
笔记:该代码缺乏错误处理。如果输入包含非数字字符,您可能会得到意外结果,并且计算可能会溢出非常长数字。