Bash
數學運算 - Bash 腳本
我正在嘗試編寫一個腳本(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
shell 算術
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"
用簡短的**
awk
**腳本:**
sum_powered.awk
**腳本:#!/bin/awk -f BEGIN{ split(ARGV[1], a, ""); pow = ARGV[2]; for (i in a) sum += a[i] ** pow; print sum; }
用法:
$ ./sum_powered.awk 12345 2 55 $ ./sum_powered.awk 3706907995955475988644381 25 3706907995955475217645568
在執行之前,您可能需要向新的awk腳本添加執行權限:
$ chmod +x sum_powered.awk