A   Narcissistic decimal number   is a non-negative integer,   



n


{\displaystyle n}

,   that is equal to the sum of the   



m


{\displaystyle m}

-th   powers of each of the digits in the decimal representation of   



n


{\displaystyle n}

,   where   



m


{\displaystyle m}

   is the number of digits in the decimal representation of   



n


{\displaystyle n}

.



Narcissistic (decimal) numbers are sometimes called   Armstrong   numbers, named after Michael F. Armstrong.

They are also known as   Plus Perfect   numbers.



An example

   if   



n


{\displaystyle n}

   is   153 
   then   



m


{\displaystyle m}

,   (the number of decimal digits)   is   3 
   we have    13 + 53 + 33   =   1 + 125 + 27   =   153  
   and so   153   is a narcissistic decimal number


Task

Generate and show here the first   25   narcissistic decimal numbers.



Note:   




0

1


=
0


{\displaystyle 0^{1}=0}

,   the first in the series.



See also

   the  OEIS entry:     Armstrong (or Plus Perfect, or narcissistic) numbers.
   MathWorld entry:   Narcissistic Number.
   Wikipedia entry:     Narcissistic number.


 
#!/bin/ksh
 
# Narcissistic decimal number
 
#	# Variables:
#
 
#	# Functions:
#
 
#	# Function _isnarcissist(n) - return 1 if n is a narcissistic decimal number
#
function _isnarcissist {
	typeset _n ; integer _n=$1
 
	(( ${_n} == $(_sumpowdigits ${_n}) )) && return 1
	return 0
}
 
#	# Function _sumpowdigits(n) - return sum of the digits raised to #digit power
#
function _sumpowdigits {
	typeset _n ; integer _n=$1
	typeset _i ; typeset -si _i
	typeset _sum ; integer _sum=0
 
	for ((_i=0; _i<${#_n}; _i++)); do
		(( _sum+=(${_n:_i:1}**${#_n}) ))
	done
	echo ${_sum}
}
 
 ######
# main #
 ######
 
integer i cnt=0
for ((i=0; cnt<25; i++)); do
	_isnarcissist ${i} ; (( $? )) && printf "%3d. %d\n" $(( ++cnt ))  ${i}
done
 