print bin2dec("1110010101011101111011110110101010111"); # Calculate a (arbitrarily large) decimal number from its # binary representation # sub bin2dec { my ($str) = @_; my $ret = ""; $ret = mul2($ret, $_) foreach split(//, $str); return $ret; } # Given a (arbitrarily large) decimal number N as a string, # returns 2N or 2N+1 # sub mul2 { my ($str, $add_one_f) = @_; defined($add_one_f) or $add_one_f = 0; my $ret = ""; foreach (my $i = length($str) - 1; $i >= 0; --$i) { my $c = substr($str, $i, 1) * 2; $c += 1 if ($add_one_f); $ret = ($c % 10) . $ret; $add_one_f = ($c >= 10); } return $add_one_f ? '1' . $ret : $ret; }