2011-06-25 28 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

相关问题