2016-06-09 12 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

동의합니다. 나는 이해를위한 아주 기본적인 코드를 주었다. – 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 여기서 완전히 필요합니다. Slava, 나는이 위치를 0으로 테스트했으며 완벽하게 작동합니다. 동의하지 않으면이 코드를 컴파일러에 넣고 실행하십시오. –

+1

'rpm-lastDigit'은 중복되어 있으므로 그냥 제거하면 아무런 차이가 없습니다. 그리고 0 번을 여러 번 돌리려고 시도하면 문제가 표시됩니다. – Slava