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);
|
|