题目描述
任何一个正整数都可以用2的幂次方表示。例如137=27+23+20。
同时约定方次用括号来表示,即a可表示为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(O)。又如1315=210 +28+25+2+1
所以1315最后可表示为2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(O))+2+2(0)。
输入格式
—行一个正整数n。
输出格式
符合约定的n的0,2表示(在表示中不能有空格)。
输出范例:
输入:1315 输出:2(2(2+2(0))+2)+2(2(2+2(0)) )+2(2(2)+2(0))+2+2(0)
完全用的递归作答,想看懂的话自己在脑子里把范例的输出对照代码想一遍就好了。另外n==1那个判定不要删,虽然删了也可能过关,但那个判断可以适应输入的n==1的情况。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38#include<iostream> #include<string> using namespace std; void fun(int n, string& s) { if (n == 2) s += "2"; else if (n == 1) s += "2(0)"; else { int i,t=1; for (i = 1;; ++i) { t *= 2; if (t * 2 > n) break; } if (i == 1) s += "2"; else { s += "2("; fun(i, s); s += ")"; } if (n - t > 2) { s+= "+"; fun(n - t, s); } else if (n-t == 2) s += "+2"; else if (n-t == 1) s += "+2(0)"; } } int main() { int n; string s; cin >> n; fun(n,s); cout << s; return 0; }
最后
以上就是还单身指甲油最近收集整理的关于幂次方的全部内容,更多相关幂次方内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复