Циклические сдвиги C++

   Запишем целое десятичное число N в двоичной системе счисления и образуем все левые циклические сдвиги числа N, у которых первая цифра числа переносится в конец.

  Например, если N = 11, то в двоичной системе это 10112, его циклические сдвиги: 01112, 11102, 11012, 10112. Максимальное значение M у всех полученных таким образом чисел будет иметь число 11102 = 1410.

  Для заданного числа N определить максимальное значение M.

Входные данные

   Единственное число N1 ≤ N ≤ 2·109.

Выходные данные

   Искомое число M.

 

			#include "iostream"
using namespace std; 
int main() 
{
int k,n=0,i,j,max=0,a[31][31],fl;
cin >> k;
while(k > 0)
{
a[0][n++]=k%2;
k/=2;
}
for(i=1; i < n; i++)
{
for(j=0; j < n; j++)
a[i][j]=a[0][(j+i)%n];
fl=0;
for(j=n-1; j >= 0 && fl==0; j--)
{
if(a[max][j] > a[i][j])
fl=1;
if(a[max][j] < a[i][j])
fl=2;
}
if(fl==2) max=i;
}
j=1;
for(i=0; i < n; i++)
{
k+=a[max][i]*j;
j*=2;
}
cout << k << endl;
}
Назад

Повышение продаж с помощью веб-форм Разложение числа на простые множители Как качественный контент способствует продвижению сайта Как выбрать хостинг Как писать SEO-тексты? Что такое SEO оптимизация сайта


Хостинг

Есть решение которого нет на сайте? Пиши admin@devexe.top