去某軟面試 面試官給個題上黑板做,寫個算法 求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);
}
