【问题标题】:Sum digits of a number while greater than 2 digits大于 2 位的数字的总和
【发布时间】:2017-04-17 07:46:10
【问题描述】:

挑战是将给定数字的位数相加,直到结果只有一位。假设数字是“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

【问题讨论】:

  • 那么问题出在哪里?不工作吗?

标签: bash while-loop do-while


【解决方案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

【讨论】:

    【解决方案2】:

    一个笨拙的人可以加入吗?

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

    【讨论】:

    • 我工作得很好。似乎 while 循环内部的逻辑是以“纯 bash”方式重现它的关键。
    猜你喜欢
    • 2017-04-02
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多