Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] массивы, Поразрядная обработка целых чисел Циклич 
:(
    Опции темы
MCGRIS
Дата 20.10.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.10.2009

Репутация: нет
Всего: -1



Поразрядная обработка целых чисел
Циклически сдвинуть длинное целое число N на K разрядов влево.  





ПОМАГИТЕ пожалуйста!!! 


Сори да операции! а просто только начал учиться программированию недавно! просто чайник пока!)

Заранее спасибо за помощь!


Это сообщение отредактировал(а) MCGRIS - 26.10.2009, 22:00
PM MAIL   Вверх
DrHex
Дата 20.10.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



 может быть >> << операции???
--------------------
google.com и это все.
PM MAIL   Вверх
baldina
Дата 20.10.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Код

for (int i=1; i <= K; ++i)
{
  int b = !!(N&~(-1UL>>1));
  (N<<=1)|=b;
}

PM MAIL   Вверх
alexdndz
Дата 20.10.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 20.10.2009

Репутация: нет
Всего: нет



попробуй записать цифры числа n в элементы одномерного массива, затем массив читая с конца, делить его на 10, точнее находить остаток от дления и записывать как тебе надо
PM MAIL   Вверх
baldina
Дата 21.10.2009, 01:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



мдя... похоже шутка не удалась...  smile 

MCGRIS, вот так:
Код

N = (N << K) | ((unsigned long)N >> sizeof (unsigned long) * 8 - K)


PM MAIL   Вверх
MCGRIS
Дата 21.10.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.10.2009

Репутация: нет
Всего: -1



Цитата(alexdndz @ 20.10.2009,  23:58)
попробуй записать цифры числа n в элементы одномерного массива, затем массив читая с конца, делить его на 10, точнее находить остаток от дления и записывать как тебе надо

как это сделать как примерно код выглядит?
PM MAIL   Вверх
Alexeis
Дата 21.10.2009, 20:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(MCGRIS @  20.10.2009,  22:04 Найти цитируемый пост)
длинное целое число N 

Что такое длинное целое число? Каково его представление в массиве?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bsa
Дата 26.10.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
mr.Anderson
Дата 26.10.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Длинное целое число - это число, представленное в виде массива, каждый элемент которого содержит одну цифру этого числа (в естественном виде, 12345 даст массив {1, 2, 3, 4, 5}), что позволяет сильно расширить диапазон используемых чисел. Поразрядный сдвиг понятно что такое, просто сдвиг всех цифр влево или вправо на одну, переполняющиеся (выходящие за границу) дописывать в начало или конец массива в зависимости от того, куда двигаем.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
baldina
Дата 27.10.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



mr.Anderson телепат? Из чего следует определение "длинного целого числа"? 
Цитата

Поразрядная обработка целых чисел
Циклически сдвинуть длинное целое число N на K разрядов влево.  

В компьютерах числа представлены в двоичном виде, соответственно разрядом обычно считается двоичный разряд.

Кстати. Не теряя общности.
Цитата

Код

N = (N << K) | ((unsigned long)N >> sizeof (unsigned long) * 8 - K)



Если
Код

class LongInt : public std::vector<unsigned> {
public:
  static const int digits = 10;
  LongInt () : std::vector<unsigned>(digits) {}
  LongInt& operator<<= (unsigned d) { std::rotate (begin(), begin()+d, end()); std::fill (begin()+d, end(), int()); return *this; }
  LongInt& operator>>= (unsigned d) { std::rotate (begin(), begin()+(digits-d),end()); std::fill (begin(), begin()+(digits-d), int()); return *this;}
};

LongInt operator<< (const LongInt& number, unsigned d) 
{ 
   LongInt result (number);
   return result <<= d;
}

LongInt operator>> (const LongInt& number, unsigned d) 
{ 
   LongInt result (number);
   return result >>= d;
}

template <unsigned digits>
unsigned or (unsigned lhs, unsigned rhs)
{
  return (lhs|rhs)%digits;
}

LongInt operator| (const LongInt& lhs, const LongInt& rhs) 
{ 
   LongInt result;
   std::transform (lhs.begin(), lhs.end(), rhs.begin(), result.begin(), or<LongInt::digits>);
   return result;
}

то
Код

LongInt N;
unsigned K;

N = (N<<K)|(N>>(LongInt::digits - K));


хотя канешно проще всего лишь

Код

LongInt& LongInt::rotate (unsigned K)
{
  std::rotate (begin(), begin()+K, end());
  return *this;
}
LongInt rol (const LongInt& number, unsigned K)
{
   LongInt result (number);
   return result.rotate (K);
}

N = rol (N, K);

PM MAIL   Вверх
mr.Anderson
Дата 28.10.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Цитата
 телепат?

Практикую иногда. ;) Решал в свое время задачи на длинную арифметику. Это из той же оперы.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
baldina
Дата 28.10.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



блин, я как всегда в танке. слово "массивы" в теме. посыпаю пеплом все места...
PM MAIL   Вверх
MCGRIS
Дата 7.1.2010, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.10.2009

Репутация: нет
Всего: -1



Спасибо народ! а на си просто как это будет?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.