2011-06-25 20 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]) 

EDIT:追加されました迅速かつ汚いC液

#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

関連する問題