Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.25;
Скачать: CL | DM;

Вниз

Математика   Найти похожие ветки 

 
VirEx ©   (2008-05-01 19:50) [0]

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


 
Andy BitOff ©   (2008-05-01 19:58) [1]

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


 
VirEx ©   (2008-05-01 20:02) [2]

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


 
Andy BitOff ©   (2008-05-01 20:03) [3]

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


 
korneley ©   (2008-05-01 20:13) [4]

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


 
Andy BitOff ©   (2008-05-01 21:02) [5]

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


 
{RASkov} ©   (2008-05-01 21:27) [6]

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


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


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

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


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


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


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


 
VirEx ©   (2008-05-01 23:09) [9]


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

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


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

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;


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

> GetSNum"ы

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


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


> VirEx ©   (01.05.08 19:50)  

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


 
VirEx ©   (2008-05-02 10:36) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2008.05.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-1197928124
tempovik
2007-12-18 00:48
2008.05.25
Как получить значение и индекс из сетки DBGrid?


15-1207731098
brother
2008-04-09 12:51
2008.05.25
Помогите определить кодировку ну или что там написано...


15-1208079846
webster
2008-04-13 13:44
2008.05.25
Домен


2-1209367199
operator
2008-04-28 11:19
2008.05.25
собственные hint и warning


3-1197897575
Sergey13
2007-12-17 16:19
2008.05.25
План запроса в MySQL