任何乙個正整數都可以用 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進行遞迴...