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