私は、最初の数字の各数字の合計を提供し、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
シェル算術は、bash
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"