Written in the wrong language, just to taunt you:
# Possibly the stupidest algorithm ever.
sub ArabicToRoman{
# This is an integer
my $arabic = shift @_;
# This is a string
my $roman;
# Make our string into a LOT of 'I's
for(my $ii = 0; $ii < $arabic; $ii++){$roman .= "I"}
# Condense our numeral with a bunch of regexes
$roman =~ s/IIIII/V/g;
$roman =~ s/VV/X/g;
$roman =~ s/XXXXX/L/g;
$roman =~ s/LL/C/g;
$roman =~ s/CCCCC/D/g;
$roman =~ s/DD/M/g;
$roman =~ s/DCCCC/CM/g;
$roman =~ s/CCCC/CD/g;
$roman =~ s/LXXXX/XC/g;
$roman =~ s/XXXX/XL/g;
$roman =~ s/VIIII/IX/g;
$roman =~ s/IIII/IV/g;
# All done.
return $roman;
}
# Not as stupid as above.
sub RomanToArabic{
# This is a string.
my $roman = shift @_;
# Expand subtraction shortcuts
$roman =~ s/IV/IIII/g;
$roman =~ s/IX/VIIII/g;
$roman =~ s/XL/XXXX/g;
$roman =~ s/XC/LXXXX/g;
$roman =~ s/CD/CCCC/g;
$roman =~ s/CM/DCCCC/g;
# This is an integer
my $arabic;
# Turn our string into an array of integers.
my @chars = split //, $roman;
# Do a lot of addition.
foreach my $char(@chars){
if($char eq "I"){$arabic += 1}
elsif($char eq "V"){$arabic += 5}
elsif($char eq "X"){$arabic += 10}
elsif($char eq "L"){$arabic += 50}
elsif($char eq "C"){$arabic += 100}
elsif($char eq "D"){$arabic += 500}
elsif($char eq "M"){$arabic += 1000}
}
# All done.
return $arabic;
}