Выше по иерархии
Другие алгоритмы.

Математика: Разное.

Запись числа прописью.

     Алгоритм, имхо, очевиден.

Вот исходник на Паскале.

function    GetByWords(L: Longint): string;

 const

  _1_2: array[1..2] of string[5] = ('одна ','две ');

  _1_19: array[1..19] of string[13] = (

                   'один ',      'два ',

                   'три ',       'четыре ',

                   'пять ',      'шесть ',

                   'семь ',      'восемь ',

                   'девять ',    'десять ',

                   'одиннадцать ','двенадцать ',

                   'тринадцать ','четырнадцать ',

                   'пятнадцать ','шестнадцать ',

                   'семнадцать ','восемнадцать ',

                   'девятнадцать ');

 des: array[2..9] of string[12] = (

                   'двадцать ',  'тридцать ',

                   'сорок ',     'пятьдесят ',

                   'шестьдесят ', 'семьдесят ',

                   'восемьдесят ','девяносто ');

 hang: array[1..9] of string[15] = (

                   'сто ',       'двести ',

                   'триста ',    'четыреста ',

                   'пятьсот ',   'шестьсот ',

                   'семьсот ',   'восемьсот ',

                   'девятьсот ');

  NameRub: array[1..3] of string[7] = ('рубль ','рубля ','рублей ');

  NameTho: array[1..3] of string[7] = ('тысяча ','тысячи ','тысяч ');

  NameMil: array[1..3] of string[10] = ('миллион ','миллиона ','миллионов ');

  NameMrd: array[1..3] of string[11] = ('миллиард ','миллиарда ','миллиардов

');

 var

  S,S1: string;

  Many: Byte;

 procedure Semantic(I: Longint; var Words: string; var Fem: Byte);

  begin

   Words:='';

   if I>=100then

    begin

     Words:=Concat(Words,hang[I div 100]);

     I:=I mod 100;

    end;

   if I>19then

    begin

     Words:= Concat(Words,des[I div 10]);

     I:=I mod 10;

    end;

    if I<>0then if (I<3)and (Fem<>0)then Words:=Concat(Words,_1_2[I])

    else Words:=Concat( Words,_1_19[I]);

    case I of

     1: Fem:=1;

     2..4: Fem:=2;

     else Fem:=3;

    end;

  end;

 begin

  S:='';

  if L>=1000000000then

   begin

    Many:=0;

    Semantic(L div 1000000000,S1,Many);

    S:=Concat(S1,NameMrd[Many]);

    L:=L mod 1000000000;

   end;

  if L >=1000000 then

   begin

    Many:=0;

    Semantic(L div 1000000,S1,Many);

    S:=Concat(S1,NameMil[Many]);

    L:=L mod 1000000;

   end;

  if L >=1000 then

   begin

    Many:=1;

    SeMantic(L div 1000,S1,Many);

    S:=Concat(S,S1,NameTho[Many]);

    L:=L mod 1000;

   end;

  if L >=1 then

   begin

    Many:=0;

    Semantic(L ,S1,Many);

    S:= Concat( S,S1,NameRub[Many]);

   end;

  GetByWords:=S;

 end;




Вверх по странице, к оглавлению и навигации.