sub vdc { my @value = shift; my $base = shift // 2; use integer; push @value, $value[-1] / $base while $value[-1] > 0; my ($x, $sum) = (1, 0); no integer; $sum += ($_ % $base) / ($x *= $base) for @value; return $sum; } for my $base ( 2 .. 5 ) { print "base $base: ", join ' ', map { vdc($_, $base) } 0 .. 10; print "\n"; }