我解这道题用到了递归的思想以及二进制运算,代码如下
代码使用kotlin编写
import java.util.*
fun main() {
println(dealP(Integer.valueOf(readLine()), true))
}
fun dealP(num: Int, out: Boolean): String {
return when (num) {
2 -> "2(2)"
1 -> "2"
0 -> "2(0)"
else -> {
var ans = ""
if (!out) {
ans += "2("
}
var x = num
var cnt = 0
val stack = Stack<String>()
while (x != 0) {
if (x and 1 == 1) {
stack.push(dealP(cnt, false))
}
cnt++
x = x shr 1
}
var isFirst = true
while (!stack.empty()) {
if (!isFirst) {
ans += "+"
}
isFirst = false
ans += stack.pop()
}
if (!out) {
ans += ")"
}
ans
}
}
}