去某軟面試 面試官給個題上黑板做,寫個算法 求95轉2進制后1的個數。
我在黑板上敲了
static int count = 0; /// <summary> /// 獲取10進制數轉2進制后中1的個數 /// </summary> public static void BinCount(int a) { int n = -1; int b = 0; while(b<=a) { n++; b = (int)Math.Pow(2, n); } count++; var m = (int)Math.Pow(2, n - 1); if (a - m <= 0) { return; } BinCount(a - m); }
下面是main函數調用 返回的結果是6 完全正確。
static void Main(string[] args) { BinCount(95); var binCount= count; }
其實面試官是考你怎么把10進制轉成2進制 要求寫出10進制轉2進制的算法
於是乎我又寫了如下:
static string str =string.Empty;
/// <summary>
/// 10進制轉2進制
/// </summary>
/// <param name="a"></param>
public static void GetBinary(int a)
{
if(a % 2 == 0)
{
str += "0";
}
else
{
str += "1";
}
if(a / 2<1)
{
return;
}
GetBinary(a / 2);
}
應該用
StringBuilder 只有一個指針 不然空間會浪費很多
下面是main 函數調用 結果是 1111101
static void Main(string[] args) { GetBinary(95); var binarya = str; }
好吧 結果 是反的,那再考你一個 字符串反轉。給你個 “abcd” 給我返回“dcba”
我又寫了下面反轉方法:
/// <summary> /// char數組反轉 /// </summary> /// <param name="str"></param> public static void Reverse(char[] str) { if (str == null) { return;//空判斷這個細節一定不能漏 } int i = 0; while(i<str.Length-1-i) { var tem = str[i]; str[i] = str[str.Length -1- i]; str[str.Length -1- i] = tem; i++; } }
於是乎 二進制的也就完整了 返回的binary =1011111
static void Main(string[] args) { GetBinary(95); var binary = str; char[] arr = str.ToCharArray(); Reverse(arr); binary = new string(arr); }