Регистрация
18 Дек 2012
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
Даное целое число. Произвести цикличесский слвиг этого числа вправо на шест разрядов
 
#include
#include
#include

int shift(int num, int shif)
{
if (!shift || !num || abs(num)> num;
std::cout
 
/* Например, у вас есть число 100020003
* после сдвига его циклически на 6 разрядов
* у вас должно получится число 20003100,
* так как один незначащий ноль вначале удаляется,
* но если вы будете это проделывать с числовым типом,
* который содержит нули, у вас возникнут проблемы,
* связанные с тем, что любой ноль оказавшийся слева
* становится незначащим и будет удалятся.
* Такое поведение недопустимо.
* Кроме того целые числа могут быть отрицательными.
* Целое число может вначале иметь знак +
* Число может быть больше, чем допускает тип данных.
* Использование для этих целей строк и стандартного алгоритма
* решает все проблемы разом.
*/

#include
#include
#include

using namespace std;

void shift(string& num) {
auto back = num.back();
copy_n(num.rbegin() + 1, num.size() - 1, num.rbegin());
num.front() = back;
}

void shift_n(string& num, const size_t n) {
for (size_t i = 0; i < n; ++i) shift(num);
while (num.front() == '0') num.erase(0, 1);
}

int main() {
bool flag = false;
string num;
cin >> num;
if (num.front() == '+') num.erase(0, 1);
else if (num.front() == '-') {
flag = true;
num.erase(0, 1);
}
shift_n(num, 6);
if (flag) num = '-' + num;
cout
 
#include
#include

using namespace std;

int cyclicRightShift(int num, int shiftBits) {
const int totalBits = sizeof(int) * 8; // Количество бит в int (обычно 32)
shiftBits %= totalBits; // Нормализация количества сдвигаемых бит

// Маска для извлечения младших shiftBits бит
int mask = (1 >= shiftBits;

// Циклический сдвиг: перемещение младших бит в старшие позиции
lowerBits shiftBits;

int shiftedNumber = cyclicRightShift(number, shiftBits);
cout
 
Назад
Сверху