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
答え2
長すぎます。
次の数字を印刷することをお勧めしますはい自己防衛:
$ printf '%s\n' 11 5 25 625 76 111 12890625>infile
$ awk '{s=$0^2; r=$0"$"};s~r' infile
5
25
625
76
12890625
またはより秘密の形で:
$ awk '$0^2 ~ $0"$"' infile
または各番号に明確な回答が必要な場合:
$ awk '{out=" NOT "} $0^2 ~ $0"$" {out=" "} {printf "%20s %s%s",$0,"is"out"An Automorphic Number",ORS}' infile
11 is NOT An Automorphic Number
5 is An Automorphic Number
25 is An Automorphic Number
625 is An Automorphic Number
76 is An Automorphic Number
111 is NOT An Automorphic Number
12890625 is An Automorphic Number
以前のソリューション。
四角形の尾部がn
数字と一致することを確認することもできます。
#!/bin/bash
n=${1:-625}
square=$((n * n))
[[ $square =~ $n$ ]] && itis="" || itis="NOT"
echo "$n is $itis An Automorphic Number"
スクリプト情報
スクリプトにはいくつかの問題があります。
通常、非常に古い拡張の代わりに算術拡張を使用する必要があります
expr
。入力番号をスクリプトの引数として定義する方が簡単です。
変更は
square
次のとおりですsquare
。square = $((square / 10))。あなたが所有したものではありませんsquare=$((num/10))
。
いくつか変更すると、スクリプトは次のようになります。
#!/bin/bash
n=${1:-625}
flag=1
square=$((n * n))
num=$n
echo "Testing =$num= and square =$square="
while [ $num -gt 0 ]
do
flag1=$(($num % 10))
flag2=$(($square % 10))
echo "Testing +$num+ with +$square+ that generate =$flag1= and =$flag2="
if [ $flag1 -ne $flag2 ]
then
flag=0
break
fi
num=$((num / 10))
square=$((square / 10))
done
if [ $flag -eq 0 ]
then
echo "$n is NOT An Automorphic Number"
else
echo "$n is An Automorphic Number"
fi
次のように呼び出すことができます。
$ ./script 625
625 is An Automorphic Number
$ ./script 76
76 is An Automorphic Number
$ ./script 111
111 is NOT An Automorphic Number