2016-12-02 16 views
0

挑戦は、結果が1桁のみになるまで、与えられた数字の桁を合計することです。数字が「999」(9 + 9 + 9 = 27,2 + 7 = 9)とします。これは今まで私がやったことです。2桁を超える数字の合計桁

#!/bin/bash 
set +m 
shopt -s lastpipe 

NUMBER=999 

DIGITS=`echo "${#NUMBER}"` 
FINALSUM=0 

if [ "$DIGITS" -gt 0 ] && [ "$DIGITS" -gt 1 ]; then 
    grep -o . <<< "${NUMBER}" | while read DIGIT; do 
     declare -x FINALSUM="$(($FINALSUM+$DIGIT))" 
    done 
    echo $FINALSUM 
else 
    echo $SOMA 
fi 
+0

ので、問題は何ですか?それは働いていないのですか? – fedorqui

答えて

1

function sumit { 
    i="$1" 
    while [ "$i" -gt 10 ]; do 
     ((i=i%10 + i/10)) 
    done 
    echo "$1 => $i" 
} 

# Test 
for i in 10 15 999 222 2229; do 
    sumit $i 
done 
1

awk-ward guyに参加できますか?

多数のために少し遅い
$ awk -v i=999 ' 
BEGIN { 
    while(split(i,a,"") > 1) { 
     i=0; 
     for(j in a) i+=a[j] 
    } 
    print i 
}' 
9 
+0

私はうまく動作します。 whileループ内のロジックが「純粋なbash」の方法でそれを再現する鍵であることは間違いありません。 – Roger

関連する問題