art*_*rty 0 bash array shell-script for
我正在尝试编写一个脚本(script1.sh),它给出第一个数字中每个数字的总和,提高到第二个数字的幂。所以
./script1.sh 12345 2
应该输出 55
(因为 1+4+9+16+25=55)
或者 ./script1.sh 3706907995955475988644381 25
应该输出3706907995955475988644381
.
我写了一个脚本,但在某些情况下,我得到了一个负面的输出,我不知道这是怎么发生的。
例如
./script1.sh 3706907995955475988644380 25
产出
-2119144605827694052
我的脚本:
#!/bin/bash
sum=0
value=$1
arr=()
for ((i = 0; i < ${#value}; i++)); do
arr+=(${value:$i:1})
done
for x in "${arr[@]}"; do
sum=$(($sum+(x**$2)))
done
echo $sum
Run Code Online (Sandbox Code Playgroud)
shell 算法 inbash
使用 C 编译器支持的最宽整数类型。在大多数现代系统/C 编译器上,这是 64 位整数,因此“仅”涵盖 -9223372036854775808 到 9223372036854775807 的范围,并将其中的数字换行。为此,您需要使用其他工具,例如 bc:
#!/bin/bash
num1=$1
num2=$2
sum=0
for (( i=0; i<${#num1}; i++ )); do
n=${num1:$i:1}
sum=$( bc <<<"$sum + $(bc <<<"${n}^$num2")" )
done
echo "$sum"
Run Code Online (Sandbox Code Playgroud)