2016-06-09 27 views
0

我需要做所謂的「十進制右循環移位」。例如,如果輸入爲8652,輸出將爲2865cpp中的十進制右循環移位

有沒有辦法在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

其實它可以方便,快捷的方式來完成這樣的任何整型數字:

#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