2011-06-25 48 views
-4

我在採訪中被要求用位運算符交換整數中的最後一位數字和第一位數字。嘗試了很多,但我找不到解決方案。我怎樣才能做到這一點?使用按位運算符交換整數中的第一個數字和最後一個數字

+0

你爲什麼使其接近? –

+0

這個問題有什麼問題 –

+6

自由使用'%10'會讓你去你想去的地方。至於「有什麼問題」,大多數SO用戶更喜歡你展示解決它的企圖,並詢問你卡在哪裏。 –

回答

4

一個平凡的解決方案:

def swap_digit(n): 
    x = str(n) 
    if len(x) < 2: 
     return x 
    return int(x[-1] + x[1:-1] + x[0]) 

編輯:添加一個快速和骯髒℃溶液來

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int n = 123456789; 

    char buf[100]; 
    int r = snprintf(buf, sizeof(buf), "%d", n); 
    char t = buf[0]; 
    buf[0] = buf[r-1]; 
    buf[r-1] = t; 
    int swap; 
    sscanf(buf, "%d", &swap); 

    printf("n = %d, swap = %d\n", n, swap); 

    return 0; 
} 
+0

@Mikola你有號碼作爲字符串? –

+0

沒關係,但它返回一個整數。你可以很容易地修改它來做別的事情。 – Mikola

+0

@Mikola,但在這個問題上有一個'C'標籤。 –

0
def swap(i): 
    s = list(str(i)) 
    s[0], s[-1] = s[-1], s[0] 
    i = int(''.join(s)) 
    return i 

print swap(123456789) # 923456781 
7

使用int digits = log10(x)得到的位數。

使用int first = x/pow(10,digits)獲取第一位數字。

使用int last = x % 10得到最後一位數字。

把它放在一起,你有

int swapped = x + (last - first) * pow(10,digits) + (first - last)

+1

令人驚歎! +1的想象力。 –

+0

在我的系統上失敗999999999999999。 –

+0

@Dietrich Epp:是的,因爲'999999999999999> 2^31-1'對於int來說太大了。我假設(也許很糟糕,但基於對問題的評論)「x」是作爲「int」給出的。 – PengOne

相關問題