数学运算 - Bash 脚本

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)

jes*_*e_b 5

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)