Две программы на Perl, конвертирующие римские числа в десятичные и обратно.
Римские числа в десятичные
#!/usr/bin/perl -w
# Конвертация римских чисел в десятичные
$roman = "XXI"
@romanDigit = split(//,$roman);
$digitCount = @romanDigit;
$decDigit = 0;
$lastValue = 0;
for ($i = $digitCount-1; $i > -1; $i-- ){
if ($romanDigit[$i] eq "C"){
$curValue = 100;
}
elsif ($romanDigit[$i] eq "D"){
$curValue = 500;
}
elsif ($romanDigit[$i] eq "I"){
$curValue = 1;
}
elsif ($romanDigit[$i] eq "L"){
$curValue = 50;
}
elsif ($romanDigit[$i] eq "M"){
$curValue = 1000;
}
elsif ($romanDigit[$i] eq "V"){
$curValue = 5;
}
elsif ($romanDigit[$i] eq "X"){
$curValue = 10;
}
else{
die("Invalid character " . $romanDigit[$i] . " at $i");
}
if ($curValue < $lastValue){
$decDigit -= $curValue;
}
else{
$decDigit += $curValue;
}
$lastValue = $curValue;
}
print $decDigit . "\n";
Десятичные числа в римские
#!/usr/bin/perl -w
# Конвертация десятичных чисел в римские
$decDigit = 1234;
$romanDigit = "";
$nDigs = 12; # количество чисел
@decDigits = (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
@romanDigits = ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
$i = $nDigs;
while ($decDigit > 0){
while ($decDigits[$i] > $decDigit){
$i--;
}
$decDigit -= $decDigits[$i];
$romanDigit .= $romanDigits[$i];
}
print $romanDigit . "\n";