同じ番号を確認するシェルスクリプトが正しく機能しません。

同じ番号を確認するシェルスクリプトが正しく機能しません。
echo "Enter A Number: "
read num
show=`expr $num`
flag=1
square=`expr $num \* $num`
while [ $num -gt 0 ]
do
        flag1=`expr $num % 10`
        flag2=`expr $square % 10`
        if [ $flag1 -ne $flag2 ]
        then
                flag=0
                break
        fi
        num=`expr $num / 10`
        square=`expr $num / 10`
done

if [ $flag -eq 0 ]
then
        echo $show "is NOT An Automorphic Number"
else
        echo $show "is An Automorphic Number"
fi

自動識別番号を確認するコードです。デフォルトでは、この数字は四角形の末尾に表示されます。 625年末に25個が残ったようです。

入力5でのみ動作します。 25、76などでは動作しません。私はどこで間違っていますか?

ベストアンサー1

私は算術が好きではないので、計算を実行するサンプルプログラムをbash書いています。awk

{len=length($1);
pow=$1 * $1; 
div= 10^len; 
if ($1 == pow % div) print $1 " is An Automorphic Number"; 
else print $1  " is not An Automorphic Number"}

入力番号の長さにのみ興味を持ち、それに応じて設定します。私のテストは次のとおりです。

[ ~]$ echo 1 |awk '{len=length($1);pow=$1 * $1; div= 10^len; if ($1 == pow % div) print $1 " is An Automorphic Number"; else print $1  " is not An Automorphic Number"}'
1 is An Automorphic Number
[ ~]$ echo 5 |awk '{len=length($1);pow=$1 * $1; div= 10^len; if ($1 == pow % div) print $1 " is An Automorphic Number"; else print $1  " is not An Automorphic Number"}'
5 is An Automorphic Number
[ ~]$ echo 76 |awk '{len=length($1);pow=$1 * $1; div= 10^len; if ($1 == pow % div) print $1 " is An Automorphic Number"; else print $1  " is not An Automorphic Number"}'
76 is An Automorphic Number

おすすめ記事