![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разложение числа на разрядные слагаемые [D7, XP]
Виталий © (2009-07-23 07:11:00)Требуется разложить число на разрядные слагаемые, т.е
есть число 11258. нужно получить
11000+200+50+8
поделитесь идеями как это реализовать? у меня пока только одна мысль - сделать таблицу разрядов и по ней проверять. Может есть такой "велосипед"?
oldman (2009-07-23 17:53:00) [1]
> у меня пока только одна мысль - сделать таблицу разрядов
> и по ней проверять.
А пропарсить строку религия запрещает?
Виталий (2009-07-23 08:09:00) [2]ооо...спасибо огромное. сейчас буду смотреть.
Palladin (2009-07-23 08:04:00) [3]Чуть чуть Decod2 доработаный:
Procedure Decod2(n:Integer;r:TStrings);
Var
p:Integer;
c:Integer;
t:Integer;
Begin
p:=10; t:=0;
Repeat
c:=(n mod p)-t;
If c<>0 Then
Begin
r.Add(IntToStr(c));
t:=t+c;
End;
p:=p*10;
Until (p div 10)>n;
End;
Palladin (2009-07-23 08:02:00) [4]выбирай на вкус
Function Pow10(n:Integer):Integer;
Var
i:Integer;
Begin
Result:=1;
For i:=1 to n Do Result:=Result*10;
End;
Procedure Decod2(n:Integer;r:TStrings);
Var
d:Integer;
p:Integer;
c:Integer;
t:Integer;
Begin
d:=1; p:=10; t:=0;
Repeat
c:=(n mod p)-t;
r.Add(IntToStr(c));
t:=t+c;
Inc(d);
p:=Pow10(d);
Until (p div 10)>n;
End;
Procedure Decod1(n:Integer;r:TStrings);
Var
i:Integer;
s:String;
Begin
s:=IntToStr(n);
For i:=1 to Length(s) Do
If s[i]<>'0' Then
r.Add(IntToStr((Byte(s[i])-Byte('0'))*Pow10(Length(s)-i)));
End;
Виталий (2009-07-23 07:53:00) [5][1] да. прошу прощения.
10000+1000+200+58
число нужно разложить именно так.
Palladin (2009-07-23 07:45:00) [6]а почему не на 10000+1000+200+50+8 ? или 11000+75+125+30+20+5+3 ?
тебе на какие слагаемые то?