洛谷 P1010 冪次方

2021-10-08 14:25:44 字數 1211 閱讀 3578

任何乙個正整數都可以用 22 的冪次方表示。例如 137=2^7+2^3+2^0137=27+23+20。

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

由此可知,137137 可表示為 2(7)+2(3)+2(0)2(7)+2(3)+2(0)

進一步:

7= 2^2+2+2^07=22+2+20 ( 2^121 用 22 表示),並且 3=2+2^03=2+20。

所以最後 137137 可表示為 2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)。

又如 1315=2^ +2^8 +2^5 +2+11315=210+28+25+2+1

所以 13151315 最後可表示為 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

一行乙個正整數 nn。

符合約定的 nn 的 0,20,2 表示(在表示中不能有空格)。

輸入 #1複製

1315
輸出 #1複製

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
對於 100\%100% 的資料,1\le n\le 2\times 10^41≤n≤2×104。

分析:這題沒什麼難的,就是考察遞迴,處理好細節就行

對於輸入的數n,先把n拆分成2(n1)+2(n2)+2(n3)+....的形式,然後再去拆分n1,n2,拆分n1,n2的時候呼叫的函式就是拆分n的函式,在這裡完成了遞迴,我的**裡是通過devide函式來完成的,還有個函式firstnum是求n1,n2.....的,處理好1和2的表示方法就可以了

上ac**:

#include#includeusing namespace std;

int n;

string devide(int k);

int firstnum(int k);

int main()

if(k==1)

s+="+2(0)";

return s; }

int firstnum(int k)

return ans;

}

洛谷 P1010 冪次方

前言 只為轉c 刷水題.題目描述 任何乙個正整數都可以用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 2 1用2表示 3 2 2 0 所以最後137可表示為 ...

洛谷 P1010 冪次方

前言 只為轉c 刷水題.題目描述 任何乙個正整數都可以用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 2 1用2表示 3 2 2 0 所以最後137可表示為 ...

洛谷 P1010 冪次方

p1010 冪次方 includeusing namespace std int ans2 15 ans2 i 2 i int ans1 50001 如ans1 i k,則表示2 k 1 i void work int a if b 1 如果是2的超過1次方,則還可以再分,因此輸出2 後將b進行遞迴...