RosettaCodeData/Task/Digital-root/Amazing-Hopper/digital-root.hopper
2024-10-16 18:07:41 -07:00

29 lines
747 B
Text

#!/usr/bin/hopper
#include <batch-en.h>
/* main program */
begin
ld=0
set decimal '0' // work with integers only
prepare data(DATA) // my dear "old" BASIC!
get len data, move to 'ld'
iter group ( --ld, ld, get data, perform(digital root), echo )
end
/* procedures */
.locals
func(digital root, n)
c = 0, cnum=n
iter group (++c, #(n>=10), s=0, q=0, m=n, \
iter group ( m=q, #( m<>0 ),\
#( q=int(m/10) ), #( s+= m-(q*10) ) ), n=s )
/* put all into stack */
#( lpad(".", 20, string(cnum) ) )
" -> digital root = ", #(n+0),", (additive persistence = ",#(c+0),")"
back
DATA:
data( 9992, 39390, 588225, 627615, 393900588225, 9837703004232342 )
data( 126765060022822940, 199, 10 )
back