Anonymous user
Vampire number: Difference between revisions
m
→{{header|REXX}}: changed some comments and whitespace.
m (→{{header|REXX}}: changed some comments and whitespace.) |
|||
Line 2,686:
if N>0 then do j=1260 until # >= N /*search until N vampire numbers found.*/
if length(j) // 2 then do; j=j*10 - 1; iterate; end /*adjust J*/
_=right(
f=vampire(j); if f=='' then iterate /*Are fangs null? Yes, not vampire. */
#=#+1 /*bump the vampire count, Vlad. */
say 'vampire number' right(#,length(N)) "is: " j', fangs=' f
end /*j*/ /* [↑] process a range of numbers. */
else do; N=abs(N); f=vampire(N) /* [↓] process
if f=='' then say N " isn't a vampire number."
else say N " is a vampire number, fangs=" f
end
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
vampire: procedure; parse arg ?,, $. !! bot; L=length(?)
w=L % 2
top=left( reverse(bot), w); bot=left(bot, w) /*determine limits of search*/
inc=?//2 + 1 /*? is odd? INC=2. No? INC=1*/
/* [↑] odd
do d=
if ? // d \==0
if verify(d, ?) \==0 then iterate
q=? % d;
if q*d//9 \== (q+d)//9 then iterate
if verify(q, ?) \==0 then iterate
if right(q, 1) ==0 then if right(d, 1)==0 then iterate
if length(q) \== w then iterate
dq=d || q; t=?
do i=1 for L;
if p==0 then iterate d;
end /*i*/
!!=!! '['d"∙"q']'
end /*d*/
return !!</lang>
'''output''' when using the default input:
<pre>
vampire number 1 is: 1260, fangs= [21∙60]
vampire number 2 is: 1395, fangs= [15∙93]
|