2016-06-09 10 views
0

Мне нужно сделать так называемый «десятичный правый циклический сдвиг». Например, если входной сигнал 8652, выход будет 2865.Десятичный правый циклический сдвиг в cpp

Есть ли способ выполнить эту операцию в CPP без преобразования в строки и операции с строкой? Просто используя арифметические операции, циклы и преобразования в двоичные.

+0

Вы можете искать * сторнировать целое число в C++ * и получить все виды ответов. – NathanOliver

+0

Выполняют ли операции в '' как арифметические операции? – AndyG

ответ

1

Если количество цифр в количестве строго 4, вы можете сделать:

int src = 1234; 

int dest = (src/10) + (src % 10) * 1000; 

Здесь, если src оказывает 0 в конце концов, получить бы dest быть 3 цифры. Вам нужно справиться с этим.

Для других длин вам необходимо соответствующим образом скорректировать код.

+0

Я бы сделал '1000' как именованную переменную/константу вместо магического числа и упомянул, что ее нужно изменить для других цифровых чисел. – Slava

+0

Я согласен с вами. Я дал очень простой код для понимания. Я бы предпочел 'constexpr';) – Ajay

+0

Должно ли это (src/10) + (src% 10) * 1000 – cup

0

На самом деле это может быть сделано в простом и быстром способе, как это для любого Int номера:

#include <iostream> 
using namespace std; 

int concatenate (int x, int y) 
{ 
     int pow = 10; 
     while (y >= pow) 
      pow *= 10; 
     return x * pow + y; 
} 

int main() 
{ 

     int rpm = 8652; 

     // Cyclic Right Shift 
     int lastDigit = rpm % 10; //getting the last digit 
     int otherDigits = (rpm - lastDigit)/10; //rest of the digits 
     int CRS = concatenate(lastDigit, otherDigits); //concatenation 
} 
+0

У вас отсутствует тип для 'rpm'. 'rpm - lastDigit' полностью избыточно. Ваша логика в конечном итоге сломает любое число, имеющее 0 в середине. – Slava

+0

Спасибо за недостающий тип. rpm - lastDigit Здесь абсолютно необходимо. Слава, я проверил это со всеми позициями 0, и он отлично работает. Если вы не согласны, поместите этот код в компилятор и запустите его. –

+1

'rpm - lastDigit' является избыточным, просто удалите его и не будет никакой разницы. И попробуйте повернуть число с 0 несколько раз, и вы увидите проблему. – Slava