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

笔记:该代码缺乏错误处理。如果输入包含非数字字符,您可能会得到意外结果,并且计算可能会溢出非常长数字。

相关内容