![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Математика [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]Хм
А ты, что делить разучился ;)