Написать программу, которая определяет числу,введенному с клавиатуры его абсолютную величину (модуль) не используя команду abs(x). (Например: вводят число "-9", программа выдает "9", или вводят "2" и выводится "2.").
1. Установим допустимые сочетания двух последних битов (битов четности). Если в N было четное количество единиц, то дописывается ноль. Поскольку ноль не меняет количества единиц, второй бит четности тоже будет нулевым. Правило №1: Если в двоичном представлении четное количество единиц, то дописывается 00. Если в N было нечетное количество единиц, то дописывается единица. Это меняет количество единиц на четное, поэтому второй бит четности будет нулевым. Правило №2: Если в двоичном представлении нечетное количество единиц, то дописывается 10.
Первое число R, большее 180, это 181. Переведем его в двоичную систему счисления. 181₁₀ = 10110101₂ Мы видим, что оба наших правила нарушены, т.е. число 181 не подходит в качестве R. Представление N (101101) содержит четное количество единиц, а для четного количества действует Правило №1 и мы должны записать 00, что уменьшит наше минимально возможное число R=181₁₀ Но если мы в числе N поменяем местами два правых бита, получим число 101110, которое больше чем 101101 и теперь по все тому же Правилу №1 мы получаем право приписать два нолика и получить R=10111000₂ = 184₁₀
C++
#include <iostream>
using namespace std;
int main()
{
int number = 1;
cout << "Input number - ";
cin >> number;
cout << endl;
int abs = 0;
number < 0 ? abs = -number : abs = number;
cout << "Abs(" << abs << ")" << endl;
return 0;
}
Объяснение: