Перевод в римскую систему счисления

Программа выводит римскую запись числа, заданного в командной строке. Перевод числа в римскую систему счисления выполняет процедура toRoman. Процедура разбивает число по десятичным цифрам, для каждой цифры найдёт соотвествие римским цифрам в соотвествии с разрядом, в котором она находится.

code: #perl
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4.  
  5. sub toRomanHelper($$)
  6. {
  7.     my $n=shift;
  8.     my $d=shift;
  9.  
  10.     my $i=qw/I X C M/[$d];
  11.     my $v=qw/V L D/[$d];
  12.     my $x=qw/X C M/[$d];
  13.  
  14.     return $i x $n if $n>=0 and $n<=3;
  15.     return ($i x (5-$n)).$v if $n==4;
  16.     return $v.($i x ($n-5)) if $n>=5 and $n<=8;
  17.     return $i.$x;
  18. }
  19.  
  20. sub toRoman($)
  21. {
  22.     my $n=shift;
  23.     return if $n!~m/^\d+$/ or $n>=4000;
  24.  
  25.     my $roman='';
  26.     for(my $d=0; $n; $n=int($n/10))
  27.     {
  28.         $roman=toRomanHelper($n % 10, $d++).$roman;
  29.     }
  30.     return $roman;
  31. }
  32.  
  33. ##################################################
  34.  
  35. die "$0: Требуется натуральное число от 1 до 3999\n"
  36.     unless defined(my $decimal=shift);
  37. die "$0: Неправильное число: «$decimal»\n"
  38.     unless defined(my $roman=toRoman($decimal));
  39.  
  40. print "$roman\n";
Поделиться:

Похожие статьи: