Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - "сколько натуральных чисел, не больших заданного K , и имеют в своем двоичном разложе

Ответить
Настройки темы
C/C++ - "сколько натуральных чисел, не больших заданного K , и имеют в своем двоичном разложе

Аватара для ukrop34ik

Новый участник


Сообщения: 12
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


задача состоит в том , что :
"сколько натуральных чисел, не больших заданного K , и имеют в своем двоичном разложении ровно три значащих нуля?" - упростили её тем, что вводится определенное число : например "23". и раскладывается в двоичный код: "10111" и вот нужно посчитать количество этих "0" с выводом сообщения есть там три "0" или нету.

читать дальше »
// 1.cpp: главный файл проекта.

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "math.h"

void dvoich(int x1)
{
int i,b;
long c=0;
for(i=0; x1>0; i++);
{
b=x1%2;
x1=(x1-b)/2;
c+=b*pow((double)10,i);
}
printf("\nDvoichnoe chislo: $d",c);
}
void main()
{
int a;
printf(" Vvedite desytichnoe chislo:");
scanf_s("%d",&a);
dvoich(a);
getch();
}


но тут приехал я. работать то она работает без ошибок - но только сканит число и все.
что делать дальше мне пока что не понятно.

Отправлено: 22:44, 13-03-2013

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


ukrop34ik, У вас я так понимаю получается еще одно число в 10 системе, только состоящее из нулей и единиц.
Т.е. 23(10)=10111(2)=10111(10) / число(система счисления)
"Нарезайте" дальше получившееся число по десятичным разрядам (остаток от целочисленного деления на 10 ) и через логический "флаг" ведите подсчет нулей.
Как будет реализован этот функционал, можно будет помещать все это в цикл от 1 до K.

Вопрос. А размерность long позволит правильно отобразить двоичное представление максимального K ?

Поэтому второй вариант -- усложнить алгоритм и вести подсчет нулей сразу. Плюс ввести булеву переменную в возвращаемый результат.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:56, 14-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ukrop34ik

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Поэтому второй вариант -- усложнить алгоритм и вести подсчет нулей сразу. Плюс ввести булеву переменную в возвращаемый результат. »
я нубас ...
алгоритм то я понял но вот код писать для меня не посильная задача.

Отправлено: 00:01, 18-03-2013 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


ukrop34ik, но ведь кто-то алгоритм получения двоичного числа написал! То, что предлагаю я гораздо проще как в понимании, так и в написании. Все необходимые операции работы с переменными находятся в поисковике на раз два.
Поэтому не надо списывать себя в нубасы, лучше сразу в лентяи.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 07:43, 18-03-2013 | #4


Аватара для ViRTaCe

Пользователь


Сообщения: 139
Благодарности: 11

Профиль | Отправить PM | Цитировать


Тут даже фактически не всегда целиком надо переводить числа, иногда будет достаточно убедится что в двоичном представлении присутствует три нуля.

P.S. Прошу прощения не заметил, что нужно точное кол-во.

-------
Кривые руки исправляются опытом.


Последний раз редактировалось ViRTaCe, 18-03-2013 в 23:48. Причина: исправил


Отправлено: 10:39, 18-03-2013 | #5


Аватара для ukrop34ik

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


таки вроде что то получилось но это дело просто считает количество 0 и 1

#include <iostream>

int main(void)
{
unsigned n, n0 = 0, n1 = 0;
std::cout << "enter a number: ";
std::cin >> n;
while(n > 0)
{
if (n % 2 == 0)
n0++;
else
n1++;
n /= 2;
}
std::cout << "1s: " << n0 << std::endl;
std::cout <<"0s: " << n1 << std::endl;
system("pause");
return 0;
}

Отправлено: 16:12, 20-03-2013 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


ukrop34ik, ну вот, хорошо.
А теперь используя составной оператор, усложни обработку n0 и n1 проверкой на превышение порога в 3 идущих подряд значения.
Для этого в простейшем случае тебе понадобятся 2 переменные. Одна для того, чтобы сигнализировать о том, какая идет последовательность (нулей или единиц), вторая о том, что заданный порог достигнут.
Для этого тебе понадобятся "вложенные" ветвления (условные переходы, они же if () {} else {}. )
Т.е. конструктивно:
Код: Выделить весь код
if (...){
    if (...){
    } 
    else {
    } // if(...)
}
else{
}
P.S. Оформляй пожалуйста код, тегом [code] Знак (#) на панели сверху. Так его читать проще.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 18:27, 20-03-2013 | #7


Аватара для ukrop34ik

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


ок ша покруитм

Отправлено: 18:56, 20-03-2013 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - "сколько натуральных чисел, не больших заданного K , и имеют в своем двоичном разложе

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Если я установлю на своем Пк клавиатурный шпион, он безопасен и не нарушает закон эт micro8 Хочу все знать 7 08-08-2010 12:53
[решено] Как обсчитать факториал БОЛЬШИХ чисел... или почему 100!=0 ? centaurvv AutoIt 16 18-03-2010 17:36
VBA - [решено] Отображение больших чисел и приведение типов DaniilS Программирование и базы данных 3 23-05-2009 09:58
Пользователи домена не имеют прав на запись на локальные диски! C+C Microsoft Windows NT/2000/2003 8 01-07-2008 12:50
[решено] файлы не имеют уникальнного Joliet имени Kinohunter Оптические приводы 2 26-05-2008 22:24




 
Переход