把一个任意正整数拆解成几个是2的n次方的数
如何把一个任意正整数拆解成几个是2的n(n为正整数)次方的数,例如给参数25,就得到16 8 1;30 就得到16 8 4 2
[解决办法]
List<double> lstt = new List<double>();
String ssssssssssssss = Convert.ToString(25, 2);
int index = ssssssssssssss.Length - 1;
foreach(char ch in ssssssssssssss){
if (ch == '1')
{
lstt.Add(Math.Pow(2, index));
}
index--;
}
[解决办法]
public void Func(int input)
{
int m = 1;
for(int i = 1;i<32;i++)
{
if(m & input == m)
Console.WriteLine(m);
m = m << 1;
}
}
[解决办法]
/// <summary>
/// 把一个任意正整数拆解成几个是2的n次方的数
/// </summary>
/// <param name="num">传入的正整数</param>
/// <returns>结果字符串:传入正整数51,输出结果为"2的0次方+2的1次方+2的4次方+2的5次方" </returns>
public string Fun(int num)
{
string outputStr = "";
string ss = Convert.ToString(num, 2);
List<char> list = list = new List<char>();
foreach (char s in ss)
{
list.Add(s);
}
int j = 0; //控制幂
for (int i = list.Count - 1; i > -1; i--)
{
if (list[i] == '1')
{
outputStr += "2的" + j + "次方+";
}
j++;
}
outputStr = outputStr.Substring(0, outputStr.Length - 1); //去最后一个"+"号
return outputStr;
}
[解决办法]
int v = 123455;
int x = 0, y = 1;
string s;
while(y <= v)
{
if((v & (1 << x)) == 1)
{
s += pow(2, x).tostring() + " + ";
}
x++;
y = pow(2, x);
}