一个数,由2^n加和组成。
例子:1+2+4+8=15;
      1+4+16=21;那么给定一个数,如何求出它是那些2^n数字组成,保存在数组中去。
例如:已知一个数4141=1+8+32

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;public class MyClass
    {
    public static void Main()
    {
    int a = 21;
    int e = 0;
    while(a>0)
    {
    if (a%2==1)
    WL(Math.Pow(2, e));
    a=a/2;
    e++;
    }
    RL();
    }

    #region Helper methods private static void WL(object text, params object[] args)
    {
    Console.WriteLine(text.ToString(), args);
    }

    private static void RL()
    {
    Console.ReadLine();
    }

    private static void Break() 
    {
    System.Diagnostics.Debugger.Break();
    } #endregion
    }
      

  2.   

                int iTest = 5000;
                String str = Convert.ToString(iTest, 2);
                String strRet = iTest.ToString() + "=";
                int index = str.Length - 1;
                foreach (Char c in str)
                {
                    if(c == '1') {
                        strRet += Math.Pow(2, index).ToString()  + "+";
                    }
                    index--;
                }
                strRet = strRet.Substring(0, strRet.Length - 1);
      

  3.   

    应该是 2^n < M < 2^(n+1)找到这个n,问题就解决了,M即你所谓的已知数
      

  4.   

    Char[] arr=Convert.ToString(15, 2).ToCharArray();
                for (int i = 0; i < arr.Length; i++)
                {
                    if(Convert.ToInt32(arr[i])!=0)
                    {
                        Console.WriteLine(Math.Pow(2, i));
                    }
                }
                RL();
      

  5.   

    我第一个给出正确算法,才得10分,你们得了20还不满意,汗
    看看这个网站吧:http://www.svnhost.cn