数字的总和,大于2位数

时间:2016-12-02 11:47:51

标签: bash while-loop do-while

挑战是将给定数字的数字相加,直到结果只有一位数。假设数字为" 999" (9 + 9 + 9 = 27,2 + 7 = 9)。这就是我到现在所做的。

#!/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

2 个答案:

答案 0 :(得分:1)

一个笨蛋可以加入吗?

$ awk -v i=999 '
BEGIN {
    while( split(i,a,"") > 1) { 
        i=0; 
        for( j in a ) i+=a[j]
    }
    print i
}'
9

答案 1 :(得分: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