![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Необходимо написать функцию на С++ которая вернет количество нулевых бит в символах строки, не считая символ конца строки. Написать 2 способами - быстрым и обычным.
Проблема в том что с С++ не знаком, только начал изучать а задача есть. Помогите плиз!!
__________________
Проверено, доказано и завязано |
|
|
|
|
| Реклама: | Последние и первые люди рецензия | мэйсон дай | лобзик ювелирный ручной купить | leadtex | ppk-2d-s220 инструкция |
|
|
#2
|
|
Всем спасибо!! Написал сам!!
/*Slow method*/ int CountZeroBits(const char* Str) { int Result = 0; for (int i = 0; i < StrLen(Str); i++) for (int j = 0; j <= 7; j++) if (Str[i] & (1 << j) == 0) Result += 1; return Result; } //fast method int CountZeroBits(const char* Str) { const byte CountBitsInTetra[16] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; for (int i = 0; i < StrLen(Str); i++) Result += CountBitsInTetra[Str[i] & 15] + CountBitsInTetra[Str[i] >> 4]; return Result; }
__________________
Проверено, доказано и завязано |
|
|
|
|
|
|
#3
|
|
Неактивный пользователь
Пол:
Регистрация: 14.12.2007
Сообщений: 1
Репутация: 0
|
а что означает массив byte CountBitsInTetra[16] =
{4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; ? откуда цифры? |
|
|
|
|
|
#4
|
|
Новичок
Регистрация: 12.04.2010
Сообщений: 7
Репутация: 0
|
Я бы StrLen(Str) вынес из цикла ИМХО быстрее работать будет, если 4 байта памяти под инт не жалко
|
|
|
|
|
|
#5
|
|
Неактивный пользователь
Регистрация: 24.07.2009
Сообщений: 1
Репутация: 0
|
почему быстрее ?
|
|
|
|
|
|
#6
|
|
Неактивный пользователь
Регистрация: 11.10.2008
Сообщений: 3
Репутация: 0
|
так он уже сам написал
![]() |
|
|
|
|
|
#7
|
|
Неактивный пользователь
Пол:
Регистрация: 30.11.2010
Сообщений: 25
Репутация: 8
|
|
|
|
|
|
|
#8
|
|
Неактивный пользователь
Регистрация: 16.12.2010
Сообщений: 3
Репутация: 0
|
В качестве второго варианта, более быстрого, но требующего больше памяти могу предложить:
вместо: for (int j = 0; j <= 7; j++) if (Str[i] & (1 << j) == 0) Result += 1; return Result; создаём массив из 256 чисел, каждое из которых соответствует число нулей в соответствующем числе. Например, unsigned char ZeroAmount [] = { 8, 7, 7, 6, 7, 6, 6, 5, ... и так далее. } Добавлено через 3 минуты Тогда число нулевых битов в каждом символе строки будет ZeroAmount[Str[i]] |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Помогите срочно! | AnnaS | Скорая помощь | 11 | 14.03.2010 00:18 |
| ??????помогите срочно | LISER | Архив | 2 | 20.01.2008 19:51 |
| Помогите с алгоритмом | BFTFenix | Visual C++ / С/C++ | 4 | 20.12.2007 20:03 |
| Помогите с выбором, срочно | XomRk | Архив | 19 | 02.06.2007 06:33 |
| Помогите срочно с DSL модемом... | talisman_13 | Архив | 8 | 19.12.2006 15:27 |
|
|