Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вывод чисел содержащих "0"


Автор: Extremist 16.8.2005, 09:47
Извиняюсь за глупый вопрос, но понадобилось мне написать программку, которая из заданного диапазона чисел от 000001 до 999999 выводит все числа содержащие хотябы один "0". Может кто подскажет как организовать проверку этих самых нулей в числе? Заранее благодарен.

Автор: Hroft 16.8.2005, 10:07
Ну по крайней мере два подхода приходят на ум: самому генерировать все эти числа, фиксируя нули (рекурсия поможет), или же проверять поразрядно остаток от деления на 10. Первое сложнее, но, мне кажется, намного быстрее будет. И универсальнее.

Автор: Orlan 16.8.2005, 10:39
А можно преобразовывать в строку и искть 0 smile

Автор: chaos 16.8.2005, 10:41
дак конечно бустрее всего получиться искать в строке!
Можно еще и делить на 10, 100... как предложил Hroft

Автор: Mayk 16.8.2005, 10:51
Можно еще использовать массив из шести элементов(единицы, дестяки, сотни, т.д.)
Ну и соответственно инкрементировать в начале единицы. Если единицы >= 10, то скидывам в ноль(и, значит, выводим на печать) и инкрментируем десятки и т.д. Как только появляется нуль(и он не последняя цифра), то устанавливаем флаг - в таком-то разряде есть ноль. Главное не забыть флаг во время сбросить.
Но это фактически то, что предлагал Hroft.

Автор: Hroft 16.8.2005, 10:53
Про самое простое не подумал smile
Хотя не факт, что быстрее будет.
А мож просто вывести все числа с шагом 10 от 0? Что-нибудь не попадет? По-моему все выведутся. smile

Автор: Mayk 16.8.2005, 11:05
Цитата(Hroft @ 16.8.2005, 14:53)
А мож просто вывести все числа с шагом 10 от 0? Что-нибудь не попадет? По-моему все выведутся.

Так пропустятся кучу чисел: 401,402,403,404,405,406, etc.
Добавлено @ 11:10
Что-то я торможу сегодня. Единицы можно вывести самим.
Правда как тогда определить, что 111 не правильное число, а 1011 - правильное?

Автор: Hroft 16.8.2005, 11:10
Ну да. Даже если подправить - это плохой вариант.

Автор: Trotil 16.8.2005, 13:45
А порядок важен?

Автор: Extremist 16.8.2005, 15:13
Цитата(Trotil @ 16.8.2005, 13:45)
А порядок важен?


Да.

Автор: maddoc 16.8.2005, 15:54
Код

int main(void)
{
   char string[15];
   char *ptr, c = '0';
for(i=999999;i>0;i--){
   strcpy(string, IntToStr(i));
   ptr = strchr(string, c);
   if (ptr)
      printf("The null %c is at position: %d\n", c, ptr-string);
   else
      printf("The null was not found\n");
   return 0;
}
}

Добавлено @ 16:01
тут кое что лишнее но сам поправиш

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)