use strict;
use warnings;

use strict;
use warnings;

my $zahl = 1957;

print dez_rom($zahl), "\n";
print dez_rom(2001), "\n";

sub dez_rom
  {
  my $zahl = $_[0];
  my $roemisch = '';
  # fuer die Tausender 'M' konkatenieren
  while ($zahl > 999)
    {
    $roemisch .= 'M';
    $zahl -= 1000;
    }
  # Hunderter-Stelle bearbeiten
  $roemisch .= ziff(int($zahl/100),'C','D','M');
  $zahl = $zahl % 100;
  # Zehner-Stelle bearbeiten
  $roemisch .= ziff(int($zahl/10),'X','L','C');
  # Einer-Stelle bearbeiten
  $roemisch .= ziff((int$zahl%10),'I','V','X');
  return $roemisch;
  }
  
sub ziff
  {
  my $result = '';
  my ($wert, $einer, $fuenfer, $zehner) = @_;
  # erst die Spezialfaelle bearbeiten
  if ($wert == 9)
    { $result = $einer . $zehner; }
  elsif ($wert == 4)
    { $result = $einer . $fuenfer; }
  else
    {
    # "Fuenfer" abarbeiten...
    if ($wert > 4)
      {
      $result .= $fuenfer;
      $wert = $wert - 5;
      }
    # ...und schliesslich die Einer
    while ($wert >= 1)
      {
      $result .= $einer;
      $wert--;
      }
    }
  return $result;
  }
