二的冪次方

2022-04-30 03:15:08 字數 1438 閱讀 2997

description

任何乙個正整數都可以用2的冪次方表示。

例如:137=2^7+2^3+2^0

同時約定次方用括號來表示,即a^b 可表示為a(b)。

由此可知,137可表示為:

2(7)+2(3)+2(0)

進一步:7= 2^2+2+2^0(21用2表示)

3=2+2^0 

所以最後137可表示為:

2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:1315=2^10 +2^8 +2^5 +2+1

所以1315最後可表示為:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

input

每個測試檔案只包含一組測試資料,每組輸入乙個正整數n(n<=20000)。

output

對於每組輸入資料,輸出符合約定的n的0,2表示。(在表示中不能有空格)

sample input 1

137sample output 1

2(2(2)+2+2(0))+2(2+2(0))+2(0)

sample input 2

73sample output 2

2(2(2)+2)+2(2+2(0))+2(0)

解題思路:

(1)統計該數字的中二進位制1的位數;可以利用 

1)與運算

2)右移

實際上這是計算機思維,利用數學思維則是利用

1)用該數%2,再判斷餘數是否為1;

2)將該數n/2   並再次賦值給n   即n /= 2;

這兩種其實是一樣的,後面這種的數學思維最後轉化在計算機裡仍是利用 

與運算    和   右移運算;

(2)不斷遞迴,觀察到題目最後結果只有2(2),和2和2(0)這三種形式,故遞迴的最終結束條件就是這三個;

**如下:

1 #include2

using

namespace

std;34

intn ,tmp;

5void digui(int

n) //遞迴函式

617 n>>=1

; //向右移一位;

18 i++;19}

2021

22for( i = count1 - 1;i >= 0;i--)

23else

28if(flag[i]==1

) //如果序號為1  ,即輸出2(1);

29else

32if(flag[i]==2

) //如果序號為2  ,即輸出2(2);

33else

3641

if(i!=0) cout<<"+"

;42}43

}44intmain()

45

二的冪次方

任何乙個正整數都可以用2的冪次方表示。例如 137 27 23 2 0 27 23 20 27 23 20,同時約定次方用括號來表示,即a b ab ab可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 22 2 20 22 2 20 22 2 20 2 1 21 21用...

2的冪次方

2的冪次方 noip1998 問題描述 任何乙個正整數都可以用2的冪次方表示。例如 137 2 7 2 3 2 0 同時約定方次用括號來表示,即ab可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 2 2 2 2 0 21用2表示 3 2 2 0 所以最後137可表示為 ...

2的冪次方表示

題目 任何乙個正整數都可以用2的冪次方表示。例如 137 27 23 20 同時約定方次用括號來表示,即ab 可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 22 2 20 21用2表示 3 2 20 所以最後137可表示為 2 2 2 2 2 0 2 2 2 0 2 ...