Перевод из римской системы счисления в десятичную
Категория: Perl
2011-08-30 23:19:03
Программа переводит введёную строку представляющу собой число в римской системе счисления, в десятичную. Сначала она разделяет римское число по десятичным разрядам, а затем находит десятичные цифры соотвествующие этим разрядам.
code: #perl
- #!/usr/bin/perl
- use warnings;
- sub parseRomanHelper($$)
- {
- my $fragment=shift;
- return 0 unless $fragment;
- my $d=shift;
- if($d==1)
- {
- $fragment=~tr/XLC/IVX/;
- }
- elsif($d==2)
- {
- $fragment=~tr/CDM/IVX/;
- }
- elsif($d==3)
- {
- $fragment=~tr/M/I/;
- }
- $d=10**$d;
- return $d*length($fragment) if $fragment=~m/^I{1,3}$/;
- return $d*4 if $fragment eq 'IV';
- return $d*(4+length($fragment)) if $fragment=~m/^VI{0,3}$/;
- return $d*9;
- }
- sub parseRoman($)
- {
- if(shift=~m/^(M{0,3})(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$/)
- {
- return parseRomanHelper($1, 3)
- +parseRomanHelper($2, 2)
- +parseRomanHelper($3, 1)
- +parseRomanHelper($4, 0);
- }
- return;
- }
- ##################################################
- die "$0: Требуется римское число\n"
- unless defined(my $roman=shift);
- die "$0: Неправильное римское число: «$roman»\n"
- unless defined(my $decimal=parseRoman($roman));
- print "$decimal\n";
Поделиться: