![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
demon071 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
Подскажите пожалуйста решение следующей проблемы:
При вводе целого числа типа int, должна выводиться длина этого числа. Объясните что нужно сделать. |
|||
|
||||
Voldemar2004 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
О, господи, этот вопрос обсуждался буквально неделю назад в одном из соседних топиков:
Добавлено @ 10:32 Или так:
Это сообщение отредактировал(а) Voldemar2004 - 12.5.2007, 10:35 -------------------- i_i (';') (V) ![]() |
||||
|
|||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А второй пример что делает?!
![]() Где там вообще хоть один int?! |
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Ну пусть аргументом функции будет char*
![]() Добавлено через 1 минуту и 32 секунды Я подумал, что во 2-ом примере, пользователь будет вводить только числа типа int. Это сообщение отредактировал(а) Voldemar2004 - 12.5.2007, 10:37 -------------------- i_i (';') (V) ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Так вы только запутаете человека. Длина строки символов ни какого отношения к длине числа int не имеет. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Оптимизированный вариант. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Anikmar, ну не автору, так кому-нибудь ещё пригодится, да и потом я могу объяснить, если кому-то это понадобится
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Voldemar2004 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Добавлено через 1 минуту и 8 секунд W4FhLF, мне интересно, объясни. ![]() -------------------- i_i (';') (V) ![]() |
||||
|
|||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
ok кол-во цифр в числе есть log10(|x|)+1
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Добавлено @ 11:24 W4FhLF, мощно завернул ![]() Это сообщение отредактировал(а) vinter - 12.5.2007, 11:25 |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
W4FhLF а модуль-то не надо в код ввести разве (формула-то одно, код чуток иное)? LenOfInt(-x) даст интересный результат...иль отрицательный числа = нечисла? а такто мысля однозначно правильная.. ну разве что только аппаратная зависимость появилась...
Это сообщение отредактировал(а) jonie - 12.5.2007, 13:16 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
jonie, special for you:
Enjoy! -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
betal |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 26.12.2006 Репутация: нет Всего: 1 |
![]() ![]() Добавлено через 11 минут и 47 секунд
Не все павильно. Оптимизированый код исче никому не помешал. Спасибо... --------------------
101100010100001101100001110100101111011легкие деньги |
|||
|
||||
Ln78 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
W4FhLF, я с благоговением отношусь к ассемблерным вставкам, если только мне лично не нужно сопровождать такой код, тем более – искать в нём ошибки. Но в данном случае, учитывая, что в основу положена формула log10(|x|)+1, т.е. вычисление трансцендентной функции вместо операции с целыми числами, я усомнился в великой оптимизации: если я лично напишу код на ассемблере, а не предоставлю это компилятору, неужели только за счёт этого будет выигрыш в скорости? Решив проверить, написал 5 вариантов. Эти варианты относятся к положительным (начиная с 1) 4-байтным целым числам.
Оказалось, что первый (вроде как Ваш) работает неправильно. Время счёта для разных N: N = 10000000: Вар1 – 9937, Вар2 – 578, Вар3 – 391, Вар4 – 187, Вар5 – 15 N = 200000000: Вар3 – 9062, Вар4 – 3234, Вар5 - 562 N = 2000000000: Вар4 – 30875, Вар5 – 5015 Это сообщение отредактировал(а) Ln78 - 13.5.2007, 16:19 |
|||
|
||||
W4FhLF |
|
||||||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Ln78, спасибо, что подняли такую интересную тему
![]() У меня результаты таковы: 10000000: LenOfInt1 - 218 LenOfInt2 - 719 LenOfInt3 - 290 LenOfInt4 - 170 LenOfInt5 - 67 1000000000: LenOfInt1 - 22130 LenOfInt2 - 74718 LenOfInt3 - 35719 LenOfInt4 - 18029 LenOfInt5 - 7046 Но делать маленькие замеры с помощью GetTickCount неккоректно, поэтому для дальнейших тестов я решил выбрать число наибольшей разрядности, способное поместиться в DWORD - 1000000000. Main:
Из числа приведённых Вами самая быстрая LenOfInt5, но это не предел, взяв за основу LenOfInt5 получил такое вот:
Результат на 1000000000 - 3600. Думаю не предел ![]() PS Athlon 3500+ AM2 Добавлено @ 17:51 Идём дальше ![]()
3400мс. Добавлено через 10 минут и 51 секунду advanced version ![]()
2601мс. на 1000000000 Это сообщение отредактировал(а) W4FhLF - 13.5.2007, 17:52 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||||||
|
|||||||||
Ln78 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
W4FhLF, я в ассемблере, особенно при работе с сопроцессором, не силён, поэтому для меня остались непонятными 2 вопроса: почему у меня результаты по первой функции так разительно отличаются по быстродействию и, что ещё хуже, по значению, причём последнее совсем непонятно. Так, если я перед циклом ставлю
cout << LenOfInt1(9); а сам цикл считаю от 1 до 8, получаю, хоть и неправильный но «не сильно» ответ 11. А если строку с выводом комментирую (она, кстати, тоже выводит неправильный результат, равный 2), то получаю вообще -2147483636. Функцию я просто скопировал, непонятно, то ли в ней что-то не так, то ли где-то ещё. Среда – VS2005, процессор Intel Pentium-4, 3GHz. В чём может быть причина? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |