关于 幂次方 一题的思路+代码(递归)
题目来源:洛谷 P1010 [NOIP1998 普及组] 幂次方
题目描述
任何一个正整数都可以用2的幂次方表示。例如
137=27+23+20
由此可知,137可表示为:
2(7)+2(3)+2(0)
而7又可以表示为:2(2)+2+2(0)
3可以表示为:2+2(0)
因此137最终表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)输入描述
一个正整数n(n≤20000)。
输出描述
符合约定的n的0,2表示(在表示中不能有空格)
输入样例1
1315
输出样例1
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入样例2
137
输出样例2
2(2(2)+2+2(0))+2(2+2(0))+2(0)
OP
\
思路
这道题要用递归来处理:
对于每一个大于2的数,都需要通过二进制将其拆为二的幂次和,对于每一个幂次再进行递归处理;
通过构建 tr[i] 来存储 i 的表达式;
通过处理二进制数和构建幂次栈来按顺序存储该数内含有2的哪些幂次,方便接下来的递归与构建字符串。
(对于(13)D,(1101)B
,其幂次栈即为,代表 )
还有一部分内容写在注释里了,方便理解。
代码
1 |
|
初始化在函数外会RTE!
ED
\
关于 幂次方 一题的思路+代码(递归)
https://tanyuu.github.io/2021.01-06/关于 幂次方 一题的思路+代码(递归)/