Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Математика [D7, WinXP]


VirEx ©   (2008-05-01 19:50:00) 

Нужно разбить число на входящие в него сотни десятки и единицы.
Если число более 1000, например 2000 оно не считается.
Примеры:
1526 - 1000, 500, 20, 6
2407 - 400,  7
57 - 50, 7
Как можно реализовать попроще?


VirEx   (2008-05-02 10:36:00) [1]

Удалено модератором


Плохиш   (2008-05-02 09:55:00) [2]


> VirEx ©   (01.05.08 19:50)  

Дармоеды маст дай.


{RASkov}   (2008-05-02 00:22:00) [3]

> GetSNum'ы

не правильные)


{RASkov}   (2008-05-02 00:21:00) [4]

procedure GetNumbers(Num: Int64; Lst: TStrings);
var N, K: Integer;
begin
 if not Assigned(Lst) then Exit else Lst.Clear;
 N:=10;
 repeat
  K:=Num mod N;
  if (K>0) and (K<2000) then Lst.Add(IntToStr(K));
  Num:=Num - K;
  N:=N*10;
 until Num<=0;
end;

procedure GetSNum(Num: Int64; Lst: TStrings); overload;
var N: Integer; S: String;
begin
 if not Assigned(Lst) then Exit else Lst.Clear;
 S:=IntToStr(Num);
 for N:=1 to Length(S) do Lst.Add(S[N]+StringOfChar(#48, Length(S)-N));
end;

procedure GetSNum(SNum: String; Lst: TStrings); overload;
var N: Integer;
begin
 if not Assigned(Lst) then Exit else Lst.Clear;
 for N:=1 to Length(SNum) do Lst.Add(SNum[N]+StringOfChar(#48, Length(SNum)-N));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetNumbers(StrToInt64Def(Edit1.Text, 100), Memo1.Lines);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 GetSNum(StrToInt64Def(Edit1.Text, 100), Memo1.Lines);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 GetSNum(Edit1.Text, Memo1.Lines);
end;


VirEx   (2008-05-01 23:09:00) [5]


> [8] Игорь Шевченко ©   (01.05.08 23:06)

какая уже разница, всеравно ограничение 1000 :)


Игорь Шевченко   (2008-05-01 23:06:00) [6]


> Размер числа не ограничен, хоть до 352345634763567.


ну что это за число - тьфу, а не число. В int64 без напряга влезает, а там и div и mod прекрасно работают.


VirEx   (2008-05-01 22:35:00) [7]


> [6] {RASkov} ©   (01.05.08 21:27)

спасибо за StringOfChar :)


{RASkov}   (2008-05-01 21:27:00) [8]

for N:=1 to Length(SNum) do
 Lst.Add(SNum[N]+StringOfChar(#48, Length(SNum)-N));


Andy BitOff   (2008-05-01 21:02:00) [9]

Поскольку стринг у нас массив, перевернуть этот массив так, что бы вместо 12345 мы получили 54321, тогда (индекс — 1) будет равен количеству нулей


korneley   (2008-05-01 20:13:00) [10]

Так вроде, mod и вычитание. Или, если уж так милы строки, откусывать по одному сиволу с хвоста, заменяя их на #48


Andy BitOff   (2008-05-01 20:03:00) [11]

Ну тогда строку с конца на 3 знака подели и с ними работай.


VirEx   (2008-05-01 20:02:00) [12]

Размер числа не ограничен, хоть до 352345634763567.
Зачем процессор напрягать?


Andy BitOff   (2008-05-01 19:58:00) [13]

Хм…
А ты, что делить разучился ;)


Наверх

Титульная страница Поиск, карта сайта Написать письмо