紀元前

紀元前

私は、最初の数字の各数字の合計を提供し、2番目の数字の累乗を計算するスクリプト(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

ベストアンサー1

シェル算術は、bashCコンパイラがサポートする最も広い整数型を使用します。ほとんどの最新のシステム/ 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"

おすすめ記事