挺不错的递归题,给出一个数,将他拆成只有0~2次幂的形式。把一个数拆成2的幂次的形式,这不就是我们熟悉的二进制吗!所以本题思路就是先将一个数转化成二进制形式,顺序处理二进制数位,如果位数大于等于3,那么继续拆(即转成二进制);如果位数小于等于3,那么做出相应输出。最后再去个头尾,搞定。
PS:这种题只要能写出来就肯定会通过的吧。。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <cctype>
#include <cmath>
#include <climits>
using namespace std;
const int MAXN = 20000;
const int INF = INT_MAX;
vector<int> Change(int num){
vector<int> erjinzhi;
while(num != 0){
erjinzhi.push_back(num % 2);
num /= 2;
}
return erjinzhi;
}
string dfs(int num){
vector<int> box = Change(num);//先将这个数转成二进制
string str;
bool flag = false;
for(int i = box.size()-1; i >= 0; i--){
if(box[i] =&#