题意理解
这题目就是要你分解一下,主要问题不是分解而是对于输出格式的整理。
代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static class FastScanner {
private BufferedReader br;
private StringTokenizer st;
public FastScanner() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public String nextToken() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (Exception e) {
// TODO: handle exception
}
}
return st.nextToken();
}
public int nextInt() {
return Integer.valueOf(nextToken());
}
}
static int[] pows = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 };
public static void main(String[] args) {
FastScanner fs = new FastScanner();
int n = fs.nextInt();
resolve(n);
}
public static void resolve(int x) {
if(x == 1) {
return;
}
if(x <= 2) {
System.out.print(x);
return;
}
List<Integer> nums = new ArrayList<>();
for(int i = pows.length - 1; i >= 0; i--) {
if(x >= pows[i]) {
nums.add(i);
x -= pows[i];
}
}
for(int i = 0; i < nums.size() - 1; i++) {
if(nums.get(i) != 1) {
System.out.print("2(");
resolve(nums.get(i));
System.out.print(")+");
} else {
System.out.print("2+");
}
}
int last = nums.get(nums.size() - 1);
if(last != 1) {
System.out.print("2(");
resolve(last);
System.out.print(")");
} else {
System.out.print(2);
}
}
}