2012-02-15 59 views
0

這是一個簡單號碼系列的問題,我有 2,4,8,16,32,64,128,256這些號碼是由2,2(square),2(cube)等等組成的系列號碼。如果我添加2+4+8 = 1414僅會得到通過添加2,4和8 ,所以我在我的手有14現在,通過一些邏輯我需要得到其幫助獲取值14簡單號碼系列

例子:

2+4+8 = 14 
14(some logic) = 2,4,8. 

回答

0

檢查下面的C#代碼:

x = 14; // In your case 
indices = new List<int>(); 
for (var i = 31; i >= i; i--) 
{ 
    var pow = Math.Pow(2, i); 
    if x - pow >= 0) 
    { 
     indices.Add(pow); 
     x -= pow; 
    } 
} 

indices.Reverse(); 
2

這是一個簡單的一個:

2+4+8=14 ... 14+2=16 
2+4+8+16=30 ... 30+2=32 
2+4+8+16+32=62 ... 62+2=64 

所以你只需要在你的總和上加2,然後計算ld(二進制對數),然後減1.這就給出了你需要加起來的序列元素的數量。

例如在PHP中:

$target=14; 
$count=log($target+2)/log(2)-1; 
echo $count; 

給3,所以你必須添加序列的前3種元素得到14

+0

你的意思是2 + 4 + 8 + 16 = 30 – 2012-02-15 10:13:25

+0

尤金·裏克,u能請詳細說明它,如果你幫助我的邏輯,並感謝我的名單中沒有數字1 – 2012-02-15 10:14:05

+0

1是一個錯字,我只是修復它。我還在PHP中添加了一個例子 – 2012-02-15 10:16:14

0

使用疊加模塊2職權:14 mod 2 = 014 mod 4 = 214 mod 8 = 614 mod 16 = 1414 mod 32 = 14。 .. 這個序列的差異

這就是所謂的p進數表達,是一個正式的多一點迪你看2 - 0 = 2數字,6 - 2 = 414 - 6 = 814 - 14 = 0,...很難解釋,但我希望這給你一個算法的想法。

+0

由於hroptatyr良好的信息 – 2012-02-15 10:26:34

+0

hroptatyr,如果我選擇什麼2 + 8 + 32 = 42,它fails.help我 – 2012-02-15 10:49:51

+0

42模2 = 0, 42模4 = 2, 42模8 = 2, 42模16 = 10,42 mod 32 = 10, 42 mod 64 = 42, 42 mod 128 = 42, 因此它是2-0 = 2,10-2 = 8,42-10 = 32,其餘爲0 – hroptatyr 2012-02-15 10:55:05

0

假設C:

unsigned int a = 14; 
while(a>>=1) 
{ 
printf("%d ", a+1); 
} 
0

,如果這是編程,這樣的事情就足夠了:

int myval = 14; 
int maxval = 256; 
string elements = ""; 
for (int i = 1; i <= maxval; i*=2) 
{ 
if ((myval & i) != 0) 
elements += "," + i.ToString(); 
}