我有一个数字列表,我想将每个数字中的数字彼此相乘;例如,对于数字 1234,它是 1 X 2 X 3 X 4 = 24
例如以下输入
7675342567
098765342567
1234567890
0987654
234567
8765678
98
0999
09876543
345678
876543
87654
需要以下结果:
7408800
0
0
0
5040
564480
72
0
0
20160
20160
6720
我应该如何进行?
答案1
你可以这样做:
<file sed 's/./&*/g;s/*$//' | bc
7408800
0
0
0
5040
564480
72
0
0
20160
20160
6720
使用 GNU sed
,可以简化为:
<file sed 's/./*&/2g' | bc
答案2
严格在 bash 内,假设你不这样做溢出超过 9 千万亿并发生变化 (9,223,372,036,854,775,807),
while IFS= read -r
do
res=1
for((i=0;i<${#REPLY};i++))
do
res=$((res * ${REPLY:i:1}))
done
echo "$res"
done < input > output