![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Новая проблема :+( [D5, D6, Win95/98]
stalin © (2001-12-18 00:20:00)Как зная сколько цифр в числе математическим способом развернуть число (т.е было 135 , должно получися 531 ) ....... Вот ! ;+)
KilkennyCat (2001-12-20 01:33:00) [1]>False_Delirium а в математике есть циклы ? :)
Sergey_n (2001-12-19 06:10:00) [2]2False_Delirium Delphi лень ставить, а чем DateTimeToStr(Now()) тебе не нравится? Если ты о точности, то увелич цикл(или их кол-во), чтобы дольше выполнялось.
False_Delirium (2001-12-19 05:37:00) [3]Да, кстать...DateTimeToStr(Now())- это немного не подходящая ф-ция, для таких тестов..:))..
False_Delirium (2001-12-19 05:32:00) [4]>KilkennyCat А какой же это способ..??.:)...именно математический, никаких других операций использовано не было..
False_Delirium (2001-12-19 05:16:00) [5]На паскале напиши для начала, а затем сравни..:))...чтобы тестировать...
а то нужно тогда два языка в контексте скорости выполнения рассматривать..:)..
Да...так ты тестируй сразу функции "переворота"....
Sergey_n (2001-12-19 04:41:00) [6]2False_Delirium я не поленился и потестил используя след. прог.
Label1->Caption = DateTimeToStr(Now());
double x = 20,y;
for (register __int16 i=0;i<2767;i++)
for (register __int16 j=0;j<32767;j++)
<выражение для теста>;
Label2->Caption = DateTimeToStr(Now());
и вот результат:
выражение | время выполнения (для моего компа)
-----------------------------------------------------------
pow(10,x) | 19 сек
exp(x) | 28 сек
ln(x) | 25 сек
-----------------------------------------------------------
итого exp+ln = 53 сек, pow+pow+pow = 57 сек
ну а если к exp+ln добавить Inc, Round, Dec, ....
то можно ещё поспорить кто быстрее.
KilkennyCat (2001-12-19 02:27:00) [7]но ведь все это не математический способ.
False_Delirium (2001-12-19 00:10:00) [8]Хе..:)... а вот в Inc уверен, а вот Round дествительно выполняется в 3 операции, его вообще убрать можно.....а вот что ты скажешь про pow ...:)... ?..:)
Sergey_n (2001-12-18 22:59:00) [9]2False_Delirium когда я начал писать она еще не была выполнена.
>Количество итераций -- это количество повторений цикла, а количество
>операций -- это количество арифметических действий за одну итерацию.
это ежу понятно. А ты уверен что в нутрях фу-й Inc, Round, ... арифметических действй столько, сколько ты думаешь?????
False_Delirium (2001-12-18 04:14:00) [10]А зачем ты тогда писал, если задача была уже выполнена, когда был написан первый пример..?? Количество итераций -- это количество повторений цикла, а количество операций -- это количество арифметических действий за одну итерацию.
Sergey_n (2001-12-18 03:16:00) [11]Вопрос ставился написать, а не кто меньше. В данном случае задача выполнена. Кстати как ты считал(итерации)????
False_Delirium (2001-12-18 02:05:00) [12]>Sergey_n У тебя 14 операций за итеррацию..а у меня 10...:)..хе..:))..:)))...кто меньше..?.:)))
Sergey_n (2001-12-18 01:37:00) [13]могу предложить вариант в C++
int x = 27531; //которое надо развернуть
int y = 0; //куда развернуть
int n=(int)log10(x); //длина числа которе развернуть
for (int i=n;i>=0;i--){
y=y+((int)(x/pow(10,i))-10*(int)(x/pow(10,i+1)))*(int)pow(10,n-i);
}
False_Delirium (2001-12-18 01:02:00) [14]Function Reverse(Z:Integer) : Integer ;
var T : Integer;
begin
Result := 0 ;
T := Trunc(Ln(Z)/Ln(10));
while Z>0 do
begin
Inc(Result ,(Z mod 10) * Round(Exp((T)*Ln(10)))) ;
Z := Z div 10 ;
Dec(T) ;
end
end;
Blackweber (2001-12-18 00:34:00) [15]т.е. 135>351>513
Blackweber (2001-12-18 00:28:00) [16]Возможно можно запустить цикл от 1 до length(num), в котором считывается первая цифра и ставится в конец числа.