БлогNot. 66DRCCCLXVII

66DRCCCLXVII

В комнате на стене висит портрет... тьфу ты, это мемовирус, из детства, не обращайте внимания. А вот ехал я с дачи в этот раз на электричке и увидел 2 запоминающихся настенных надписи - "Ясно!" на стене какого-то завода в районе Речкуновки и "66DRCCCLXVII" на бетонном ограждении автострады у разъезда Иня. Но если с первой надписью всё ясно, то что есть вторая? Да крупно так, в пол-роста, видно, что старался человек. Почему-то меня сразу заклинило на римских цифрах, хотя прекрасно помню, что римских чисел 66DR я не помню, а CCCLXVII даёт 367, но что мне это даёт?

Наверное, 66DRCCCLXVII - тоже мемовирус. Потому что по приезде домой я всё-таки проверил таинственные знаки в конвертере римских и арабских чисел, точней, сначала проверил, а потом минут за 15 и свой конвертер написал. Пусть простенький, зато всегда будет доступен мне в исходниках.

В общем, в Гуглояндексах ничего не было про таинственное 66DRCCCLXVII, а теперь будет. Про конвертацию арабских чисел в римские тоже много на разных языках и в исходниках, а вот из римской записи в арабскую что-то не попадается, так что вот обе функции на PHP в одном пакете:

function arabic_to_roman ($value) {
  if ($value<0) $value=-$value;
  if (!$value) return "0";
  $thousands=(int)($value/1000);
  $value-=$thousands*1000;
  $result=str_repeat("M",$thousands);
  $table=array (
    900=>"CM",500=>"D",400=>"CD",100=>"C",
    90=>"XC",50=>"L",40=>"XL",10=>"X",
    9=>"IX",5=>"V",4=>"IV",1=>"I");
  while($value) {
   foreach($table as $part=>$fragment) if($part<=$value) break;
   $amount=(int)($value/$part);
   $value-=$part*$amount;
   $result.=str_repeat($fragment,$amount);
  }
  return $result;
 }

 function roman_to_arabic ($value) {
  $table=array (
   'I'=>1,'V'=>5,'X'=>10,'L'=>50,'C'=>100,'D'=>500,'M'=>1000
  );
  $length=strlen($value);
  $active=$result=0;
  for ($i=$length-1; $i>-1; $i--) {
   $next=$table[$value[$i]];
   if ($next<$active) $result-=$next;
   else $result+=$next;
   $active=$next;
  }
  return $result;
 }

 Онлайн-сервис преобразования римских и арабских чисел

Как всегда, онлайн-версия может чем-то отличаться. Так как с 4000 у римлян начинаются цифры с подчёркиванием сверху, допустимый диапазон арабских чисел - от 1 до 3999 включительно.

Чёрт побери, но что же всё-таки такое 66DRCCCLXVII?

05.07.2011, 19:09 [9771 просмотр]


теги: программирование php числа сервис поиск

К этой статье пока нет комментариев, Ваш будет первым