program Num_To_Str;
uses
SysUtils, Math;
const
Max000 = 6; {Кол-во триплетов - 000}
MaxPosition = 18; {Кол-во знаков в числе }
function IIF (i: Boolean; s1, s2: Char): Char; overload;
begin
if i then result := s1
else result := s2
end;
function IIF (i: Boolean; s1, s2: string ): string; overload;
function Num000toStr (S: string; Woman: Boolean): string; {Num000toStr возвращает число для триплета}
c100: array ['0'..'9'] of string = ('', 'сто ', 'двести ', 'триста ', 'четыреста ', 'пятьсот ',
'шестьсот ', 'семьсот ', 'восемьсот ' ,'девятьсот ');
c10: array ['0'..'9'] of string = ('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ',
'шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
c11: array ['0'..'9'] of string = ('','один','две','три','четыр','пят','шест','сем',
'восем','девят');
c1: array [False..True, '0'..'9'] of string=(('','один ','два ','три ','четыре ','пять ',
'шесть ','семь ','восемь ','девять '),
('','одна ','две ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '));
begin{Num000toStr}
Result := c100 [s[1]] + iif ((s[2] = '1') and (s[3] > '0'), c11 [s[3]] + 'надцать ',
c10 [s[2]] + c1 [woman, s[3]]);
end;{Num000toStr}
function NumToStr (n: LongInt): string; {Возвращает число прописью}
c1000: array [0..Max000] of string = ('', 'тысяч', 'миллион', 'миллиард', 'триллион',
'квадраллион','квинтиллион');
c1000w: array [0..Max000] of Boolean = (False, True, False, False, False, False, False);
w: array [False..True, '0'..'9'] of string [3]= (
('ов ', ' ' ,'а ' ,'а ' ,'а ' ,'ов ' ,'ов ' ,'ов ' ,'ов ' ,'ов '),
(' ' ,'а ', 'и ', 'и ', 'и ', ' ', ' ', ' ', ' ', ' '));
var
s: string;
s000: string [3];
isw, isMinus: Boolean;
i: Integer; //Счётчик триплетов
s := IntToStr (n);
Result := ''; i := 0;
isMinus := (s<>'') and (s[1] = '-');
if isMinus then s := Copy (s, 2, Length (s) - 1);
while not ((i >= Ceil (Length (s) / 3)) or (i >= Max000)) do begin
s000 := Copy ('00' + s, Length (s) - i * 3, 3);
isw := c1000w [i];
if (i > 0) and (s000 <> '000') then //тысячи и т.д.
Result := c1000 [i] + w [Isw,
iif (s000 [2] = '1', Char ('0'), Char (s000 [3]))
] + Result;
Result := Num000toStr (s000, isw) + Result;
Inc (i)
if Result = '' then Result := 'ноль';
if isMinus then Result := 'минус ' + Result;
end;{NumToStr}
Num: LongInt;
Write ('Введите число: ');
ReadLn (Num);
WriteLn (NumToStr (Num));
ReadLn;
end.
Объяснение:
попробуйте эту программу на Паскале, возможно что-то подправить будет нужно
program Num_To_Str;
uses
SysUtils, Math;
const
Max000 = 6; {Кол-во триплетов - 000}
MaxPosition = 18; {Кол-во знаков в числе }
function IIF (i: Boolean; s1, s2: Char): Char; overload;
begin
if i then result := s1
else result := s2
end;
function IIF (i: Boolean; s1, s2: string ): string; overload;
begin
if i then result := s1
else result := s2
end;
function Num000toStr (S: string; Woman: Boolean): string; {Num000toStr возвращает число для триплета}
const
c100: array ['0'..'9'] of string = ('', 'сто ', 'двести ', 'триста ', 'четыреста ', 'пятьсот ',
'шестьсот ', 'семьсот ', 'восемьсот ' ,'девятьсот ');
c10: array ['0'..'9'] of string = ('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ',
'шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
c11: array ['0'..'9'] of string = ('','один','две','три','четыр','пят','шест','сем',
'восем','девят');
c1: array [False..True, '0'..'9'] of string=(('','один ','два ','три ','четыре ','пять ',
'шесть ','семь ','восемь ','девять '),
('','одна ','две ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '));
begin{Num000toStr}
Result := c100 [s[1]] + iif ((s[2] = '1') and (s[3] > '0'), c11 [s[3]] + 'надцать ',
c10 [s[2]] + c1 [woman, s[3]]);
end;{Num000toStr}
function NumToStr (n: LongInt): string; {Возвращает число прописью}
const
c1000: array [0..Max000] of string = ('', 'тысяч', 'миллион', 'миллиард', 'триллион',
'квадраллион','квинтиллион');
c1000w: array [0..Max000] of Boolean = (False, True, False, False, False, False, False);
w: array [False..True, '0'..'9'] of string [3]= (
('ов ', ' ' ,'а ' ,'а ' ,'а ' ,'ов ' ,'ов ' ,'ов ' ,'ов ' ,'ов '),
(' ' ,'а ', 'и ', 'и ', 'и ', ' ', ' ', ' ', ' ', ' '));
var
s: string;
s000: string [3];
isw, isMinus: Boolean;
i: Integer; //Счётчик триплетов
begin
s := IntToStr (n);
Result := ''; i := 0;
isMinus := (s<>'') and (s[1] = '-');
if isMinus then s := Copy (s, 2, Length (s) - 1);
while not ((i >= Ceil (Length (s) / 3)) or (i >= Max000)) do begin
s000 := Copy ('00' + s, Length (s) - i * 3, 3);
isw := c1000w [i];
if (i > 0) and (s000 <> '000') then //тысячи и т.д.
Result := c1000 [i] + w [Isw,
iif (s000 [2] = '1', Char ('0'), Char (s000 [3]))
] + Result;
Result := Num000toStr (s000, isw) + Result;
Inc (i)
end;
if Result = '' then Result := 'ноль';
if isMinus then Result := 'минус ' + Result;
end;{NumToStr}
var
Num: LongInt;
begin
Write ('Введите число: ');
ReadLn (Num);
WriteLn (NumToStr (Num));
ReadLn;
end.
Объяснение:
попробуйте эту программу на Паскале, возможно что-то подправить будет нужно