由于你这个数组是2的n次幂的序列,所以这个算法就比较好设计,因为所有的数在计算机中都是以二进制来存取的,只要把二进制各个位的数找到就可以了。看下面我写的程序
static void Parse(uint number)
{
uint bit = 1;
Console.WriteLine("Number:" + number);
for (int i = 0; i < 32; i++)
{
if ((number & bit) != 0)
{
Console.WriteLine(Math.Pow(2, i));
}
bit <<= 1;
}
}
Parse(3);
Parse(7);
Parse(6);
Parse(8);
结果
Number:3
1
2
Number:7
1
2
4
Number:6
2
4
Number:8
8
先找规律,再写程序。比如,一个数是 8,那么就对上一个数字(8/2)之前的所有数字进行循环。这道题主要考的是数学。