本帖最后由 wang520d 于 2011-11-11 04:18:09 编辑

解决方案 »

  1.   


        16 8 4 2 1   
    ---------------
    10=    1 0 1 0
    17=  1 0 0 0 1
    11=    1 0 1 117的二进制表示就是10001。一个32bit的整数有最多32个位置来存储客服组。
    不过这种数据库数据存储方式也有不足的地方,一个是扩展局限,一个是不容易理解。
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace Ctest
    {
        class Program
        {
            static void Main(string[] args)
            {
                long k = 0;
                long.TryParse(Console.ReadLine(), out k);
                if (k == 0) return;
                else
                {
                    printfresult(k);
                }
            }        static void printfresult(long x)
            {
                long i = 0;
                for (; ;i++ )
                {
                    if(x<Math.Pow(2,i))break;
                }
                i--;
                for (; i >= 0; i--)
                {
                    int tmp=(int)Math.Pow(2,i);
                    if (x > tmp)
                    {
                        Console.Write(tmp.ToString()+"+");
                        x -= tmp;
                    }
                    else if (x == tmp)
                    {
                        Console.Write(tmp.ToString());
                        break;
                    }
                }
                Console.WriteLine();
                Main(null);
            }
        }
    }
      

  3.   

    1 2 4 8 16 32比如:x 为 17  找出比它大的则是32 在数组总下标为 5 ,然后向下查找   如果 x> 匹配值  则  显示出来 如 17>16   显示:16+
    然后x=x-匹配值   即 x=17-16=1,如此循环向下找