請大家幫忙給出一個算法
請大家幫忙給出一個算法 
 下面是問題..... 
 有一組數據   1,2,4,8,16.........它的數據規則是後一個數字是前一個數字的2倍   
 現在我知道一個   數字   並且知道這個   數字   是由幾個數字組成的   
 請大家幫忙有沒有一個算法可以找出這個數字是由那幾個數字組成的.   
 例如         我知道數字28         我知道是由   3個數字組成 
 那我怎麼算出      是那幾個數字組成了28呢?   
 提示:這個數字一定是來自這一組數據其中幾個數字的和.
------解决方案--------------------好像,由幾個數字相加是定的 
 declare @a int,@m int,@r int 
 select  @a=28,@m=0,@r=1   
 while @a> 1 
 begin 
 while @r> 0 
 begin 
   if power(2,@m)> @a 
        set @r=0 
   else 
       set @m=@m+1 
 end   
 print power(2,@m-1) 
 set @a=@a-power(2,@m-1) 
 select @r=1,@m=0 
 end 
 if @a> 0 
 print @a   
 /* 
 16 
 8 
 4 
 */   
 --可以試@a=900,@a=30,@a=57,@a=23 
 /* @a=900 
 512 
 256 
 128 
 4 
 */   
 /*@a=30 
 16 
 8 
 4 
 2 
 */   
 /*@a=57 
 32 
 16 
 8 
 1 
 */
------解决方案--------------------因為數列 An=2^n 
 An> Sn-1 即(An=1+Sn-1) 
 所以,一個數,等於多少個數相加,應該是定的