首页 > 解决方案 > 查找快乐素数的 shell 代码中的问题

问题描述

这是我找到快乐素数的代码,我不知道它为什么会出错。#!/bin/bash happy(){ rem = $0 sum = $0 while [ $result -gt 0 ]; do rem = $((result%10)) p = $((rem*rem)) sum = $((sum + p)) result = $((result/10)) done return $sum
} echo "Enter a number" read num for (( i=1; i<101; i++ )) do result=$i while [ $result -ne 0 && $result -ne 4 ]; do happy $result done if [ $?==1 ]
then echo "happy number" else echo "not a happy number" fi
done

标签: shell

解决方案


我在您的脚本中看到很多语法错误和一些逻辑错误。这应该是一个固定版本(至少适用于 13 和 4 :))

我发现的错误:

  • rem = $0和类似的:在bash中不允许分配周围的空格,
  • rem = $0:您分配一个从未使用过的值,
  • rem = $0传递给函数的sum = $0第一个参数$1不是$0
  • 输入编号已分配给num但从未使用过,
  • for 和 while 循环的退出条件被破坏,
  • ...
#!/bin/bash

happy()
{
    result=$1
    sum=0
    while [ $result -gt 0 ]; do
        rem=$(( result % 10 ))
        p=$(( rem * rem ))
        sum=$(( sum + $p ))
        result=$(( result / 10 ))
    done
    echo "$sum"
}

echo "Enter a number"
read num
result=$num

for (( i=1; i<101; i++ )) do
    result=$(happy $result)
    if [ $result == 1 ]; then
       echo "$num is a happy number"
       exit
    fi
done

echo "$num is not a happy number"

推荐阅读