nyoj 46 最少乘法次數

2021-06-29 16:00:08 字數 475 閱讀 8613

最少乘法次數

問題描述:給定乙個正整數n,求2

的n次冪,每次相乘的結果,後面也能使用。

現求至少需要多少步,能得到2^n.例如2^4,2*2=2^2,2^2*2^2=2^4,所以,答案為2。

求解:每次都是乘2,我們很容易想到2進製。現在有沒有想到我們中國那句古話,叫做「擒賊先擒王」,聯絡到這道題上,我們可以先求轉化為二進位制最高位的1需要幾次才能得到,舉個例子,14 = 2^3+2^2+2^1,14中最高位1需要3次運算才能得到,

2^2,2^1這兩個數,都在最高位1運算的過程中,出現過,即都只需要1次,就可以到得,故14的答案為3+1+1=5.

上碼:

#includeusing namespace std;

int main()

m >>= 1;}

cout << highest + total - 2 << endl;

}}

nyoj 46 最少乘法次數 (遞推)

給你乙個非零整數,讓你求這個數的n次方,每次相乘的結果可以在後面使用,求至少需要多少次乘。如24 2 2 22 第一次乘 22 22 24 第二次乘 所以最少共2次 第一行m表示有m 1 m 100 組測試資料 每一組測試資料有一整數n 0輸出每組測試資料所需次數s 複製323 4 122 分析 1...

NYOJ 46 最少乘法次數 數論

思路 能夠化成二進位制來求解。結果是最高位的位數 1 最高位後面1的個數。比如 對於3。它的二進位制 為11,就是用這個最高位 2 1 加上後面的1的個數 1個 用最高位1的目的是他能代表了轉化的次數,由於2 2 4,4 4 8 8 8 16.include include include incl...

NYOJ 46最小乘法次數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 給你乙個非零整數,讓你求這個數的n次方,每次相乘的結果可以在後面使用,求至少需要多少次乘。如24 2 2 22 第一次乘 22 22 24 第二次乘 所以最少共2次 輸入 第一行m表示有m 1 m 100 組測試資料 每一組測試...