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

メモ:コードにエラー処理が不足しています。入力に数字以外の文字が含まれていると、予期しない結果が表示され、計算がオーバーフローする可能性があります。非常に長い数字。

おすすめ記事