递归。。
代码
#include <cstdio> int n; int bit[15]; inline void solve(int x) { int i, f = 0; if(!x) { printf("0"); return; } for(i = 14; i >= 0 && x; i--) if(x >= bit[i]) { printf("2"); if(i ^ 1) printf("("), solve(i), printf(")"); x -= bit[i]; if(x) printf("+"); } } int main() { int i; bit[0] = 1; for(i = 1; i <= 14; i++) bit[i] = bit[i - 1] << 1; scanf("%d", &n); solve(n); return 0; }