這是一個簡單號碼系列的問題,我有 2,4,8,16,32,64,128,256
這些號碼是由2,2(square),2(cube)
等等組成的系列號碼。如果我添加2+4+8 = 14
。 14
僅會得到通過添加2,4和8 ,所以我在我的手有14
現在,通過一些邏輯我需要得到其幫助獲取值14
簡單號碼系列
例子:
2+4+8 = 14
14(some logic) = 2,4,8.
這是一個簡單號碼系列的問題,我有 2,4,8,16,32,64,128,256
這些號碼是由2,2(square),2(cube)
等等組成的系列號碼。如果我添加2+4+8 = 14
。 14
僅會得到通過添加2,4和8 ,所以我在我的手有14
現在,通過一些邏輯我需要得到其幫助獲取值14
簡單號碼系列
例子:
2+4+8 = 14
14(some logic) = 2,4,8.
檢查下面的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+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
使用疊加模塊2職權:14 mod 2 = 0
,14 mod 4 = 2
,14 mod 8 = 6
,14 mod 16 = 14
,14 mod 32 = 14
。 .. 這個序列的差異
這就是所謂的p進數表達,是一個正式的多一點迪你看2 - 0 = 2
數字,6 - 2 = 4
,14 - 6 = 8
,14 - 14 = 0
,...很難解釋,但我希望這給你一個算法的想法。
由於hroptatyr良好的信息 – 2012-02-15 10:26:34
hroptatyr,如果我選擇什麼2 + 8 + 32 = 42,它fails.help我 – 2012-02-15 10:49:51
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
假設C:
unsigned int a = 14;
while(a>>=1)
{
printf("%d ", a+1);
}
,如果這是編程,這樣的事情就足夠了:
int myval = 14;
int maxval = 256;
string elements = "";
for (int i = 1; i <= maxval; i*=2)
{
if ((myval & i) != 0)
elements += "," + i.ToString();
}
你的意思是2 + 4 + 8 + 16 = 30 – 2012-02-15 10:13:25
尤金·裏克,u能請詳細說明它,如果你幫助我的邏輯,並感謝我的名單中沒有數字1 – 2012-02-15 10:14:05
1是一個錯字,我只是修復它。我還在PHP中添加了一個例子 – 2012-02-15 10:16:14