![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Integer прописью
xyz © (2002-08-22 02:10:00)Здраствуйте!
Подскажите пожалуйста, сильно ли замедлит работу алгоритма функция inttostr()?
Или предложите как продолжить алгоритм до миллионов.
=======================================================
unit inttowrd;
interface
var
ed : array[0..19] of string=("","один","два","три","четыре",
"пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать",
"тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать",
"восемнадцать","девятнадцать");
dec : array[2..9] of string=("двадцать","тридцать","сорок","пятьдесят",
"шестьдесят","семьдесят","восемьдесят","девяносто");
sot : array[1..9] of string=("сто","двести","триста","четыреста","пятьсот",
"шестьсот","семьсот","восемьсот","девятьсот");
function inttowd(n : integer) : string;
implementation
function ed32(n : integer) : string;
begin
result := ed[n];
end;
function dec32(n : integer) : string;
begin
case n of
0..19 : result := ed32(n);
20..29 : result := dec[2]+" "+ed[n-20];
30..39 : result := dec[3]+" "+ed[n-30];
40..49 : result := dec[4]+" "+ed[n-40];
50..59 : result := dec[5]+" "+ed[n-50];
60..69 : result := dec[6]+" "+ed[n-60];
70..79 : result := dec[7]+" "+ed[n-70];
80..89 : result := dec[8]+" "+ed[n-80];
90..99 : result := dec[9]+" "+ed[n-90];
end;
end;
function inttowd(n : integer) : string;
begin
case n of
0..99 : result :=dec32(n);
100..199 : result := sot[1]+" "+dec32(n-100);
200..299 : result := sot[2]+" "+dec32(n-200);
300..399 : result := sot[3]+" "+dec32(n-300);
400..499 : result := sot[4]+" "+dec32(n-400);
500..599 : result := sot[5]+" "+dec32(n-500);
600..699 : result := sot[6]+" "+dec32(n-600);
700..799 : result := sot[7]+" "+dec32(n-700);
800..899 : result := sot[8]+" "+dec32(n-800);
900..999 : result := sot[9]+" "+dec32(n-900);
end;
end;
end.
zavdim (2002-08-22 09:39:00) [21]Если надо то можно и до 10^!!! сделать. Я для говорения делал до 10^36-1. Если надо - пришлю. А в какой задаче применяя такое может возникнуть проблема скорости?
Ну а можно так например:
if n>100 then
result := sot[n div 100] + "" + dec32(n mod 100);
Вот, в таком духе значит.
Sam Stone (2002-08-22 09:01:00) [22]тебе какая скорость нужна? Если время увеличивается не больше, чем на 0.5 сек, то, по-моему, не стоит страдать.