2015-09-24 20 views
4

我正在嘗試編寫一個用於在二進制中反轉數字的程序。例如,13的二進制表示是1101,反轉它給出了1011,這對應於數字11的權利?int的反轉二進制表示(只有有效位)

這裏是我的代碼:

static void Main(string[] args) 
{ 
    Console.WriteLine("Enter a Number"); 
    int numb = int.Parse(Console.ReadLine()); 
    int reverse = 0; 
    while (numb > 0) 
    { 
     int rem = numb % 10; 
     reverse = (reverse * 10) + rem; 
     numb = numb/10; 

    } 
    Console.WriteLine("Reverse number={0}", reverse); 
    Console.ReadLine(); 
} 

通過這個代碼我只得到了數反轉(13 - > 31)...

輸入應包含一個符合整數ñ ,1≤N≤1000000000我希望我的輸出在一行中有一個整數,我想通過反轉N的二進制表示得到的數字。

+3

「通過此代碼,我只能得到數字反向...」 - 是的,因爲您在任何地方都使用10,這意味着您得到的是十進制數字,而不是二進制數字...... –

回答

8

類似的東西

// 13 = 1101b 
int value = 13; 

// 11 = 1011b 
int result = Convert.ToInt32(new String(
     Convert.ToString(value, 2) 
     .Reverse() 
     .ToArray()), 2); 

說明:

  • 二進制表示返回值("1101"
  • Reverse().ToArray() - 將字符串('1','0','1','1')反轉爲字符序列並將其轉換爲數組char[]
  • new String(...)結構串"1011"char
  • 陣列最後,Convert.ToInt32(..., 2)轉換二進制表示回int
0

您可以使用Convert.ToStringConvert.ToInt32方法,其中2表示二進制:

int numb = int.Parse(Console.ReadLine()); 
var reversedString = Convert.ToString(numb, 2).ReverseString(); 
var result = Convert.ToInt32(reversedString, 2); 

... 

public static string ReverseString(this string s) 
{ 
    char[] arr = s.ToCharArray(); 
    Array.Reverse(arr); 
    return new string(arr); 
} 
0

一個有趣的鍛鍊; Tibial會做這種不使用string轉換。

我有位操作很少的經驗,所以有可能是這樣做的更快,更好的方式,但是這似乎工作:

public static IEnumerable<bool> ToBinary(this int n) 
{ 
    for (int i = 0; i < 32; i++) 
    { 
     yield return (n & (1 << i)) != 0; 
    } 
} 

public static int ToInt(this IEnumerable<bool> b) 
{ 
    var n = 0; 
    var counter = 0; 

    foreach (var i in b.Trim().Take(32)) 
    { 
     n = n | (i ? 1 : 0) << counter; 
     counter++ 
    } 

    return n; 
} 

private static IEnumerable<bool> Trim(this IEnumerable<bool> list) 
{ 
    bool trim = true; 

    foreach (var i in list) 
    { 
     if (i) 
     { 
      trim = false; 
     } 

     if (!trim) 
     { 
      yield return i; 
     } 
    } 
} 

現在你會打電話像這樣:

var reversed = n.ToBinary().Reverse().ToInt(); 
相關問題