Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

На вход программе подаётся натуральное число N. Программа строит по нему новое число R следующим образом.

Татьяна Сахно Ученик (81), на голосовании 2 недели назад
На вход программе подаётся натуральное число N. Программа строит по нему новое число R следующим образом.



1. Строится двоичная запись числа N.

2. Далее эта запись обрабатывается по следующему правилу:

a. если сумма цифр в двоичной записи числа четная, то к этой записи слева дописывается 10, а затем два правых разряда заменяются на 11

b. если сумма цифр в двоичной записи числа нечетная, то к этой записи слева дописывается 1, а затем два правых разряда заменяются на 01.



Например, двоичная запись 111 числа 7 будет преобразована в 1101, а двоичная запись 101 числа 5 будет преобразована в 10111. Полученная таким образом запись является двоичной записью числа R — результата работы данной программы.



В поле ответа укажите число R, которое получится в результате обработки числа N, равного 76. В ответе это число запишите в десятичной системе счисления.
Голосование за лучший ответ
Татьяна Просветленный (36344) 1 месяц назад
Для решения задачи следуем указанным шагам:
Татьяна СахноУченик (81) 1 месяц назад
Спасибо:)
Батаев Дмитрий Просветленный (22827) 1 месяц назад
а отрицательные числа не учитываем? В двоичном виде дописать слева что-либо приведёт к ошибке переполнения
Батаев ДмитрийПросветленный (22827) 1 месяц назад
 #include  
#include
#include

using namespace std;
class numeric
{
public:
int n, n0;
bool Prt;

numeric() {};
~numeric() {};

void InputData()
{
do
{
cout << "Введите ПОЛОЖИТЕЛЬНОЕ число = "; cin >> n;
}while (n>536870912 && n>-1);
Prt= 0; n0= n;
}
Батаев ДмитрийПросветленный (22827) 1 месяц назад
 void CheckParity() 
{
int mask= 536870912;
int nn=0, cnt=0;
do
{
if (n & mask) { cnt++; if (!nn) nn= mask; }
mask = mask >> 1;
}while (mask);

cout << "cnt= " << cnt << endl;
cout << "nn= " << nn << endl;

if (cnt%2) { nn= nn << 1; n+= nn; n= n&4294967292; n+= 1; }
else { nn= nn << 2; n+= nn; n= n&4294967292; n+= 3; Prt= 1; }


}
void OutData()
{
cout << "Получено число " << n0 << endl;
cout << "Флаг чётности единиц(1) \ не чётности единиц(0) " << Prt << endl;
cout << "результат = " << n;
}
protected:
private:
};
Батаев ДмитрийПросветленный (22827) 1 месяц назад
 int main(int argc, char **argv) 
{
system("chcp 1251 > nul"); // Руссификация сообщений
setlocale(LC_ALL, "Russian");

numeric nmr; nmr.InputData(); nmr.CheckParity(); nmr.OutData();

cout << endl << "Хелло Ворлд" << endl;
system("pause"); // system("pause > nul");
return 0;
}
Panic Doctor Просветленный (43965) 1 месяц назад
 #include  

using namespace std;

constexpr int ones(int n) {
int res = 0;
while (n) {
res++;
n &= n - 1;
}
return res;
}

constexpr int bits(int n) {
int res = 0;
while (n) {
res++;
n /= 2;
}
return res;
}


int main() {
int n;
cin >> n;

int r = ones(n) % 2 == 0 ? ((1 << (bits(n) + 1)) | n) | 3
: (((1 << (bits(n))) | n) | 3) ^ 2;

cout << r << endl;

return 0;
}
Батаев ДмитрийПросветленный (22827) 1 месяц назад
^ 2 это на каком языке???
Panic Doctor Просветленный (43965) Батаев Дмитрий, на C++
Батаев ДмитрийПросветленный (22827) 1 месяц назад
мои извинения за ^
Похожие вопросы