根据给定的N值往前倒推即可。N如果为偶数,说明是3投的;如果为奇数,说明是2投的。注意最后要反转。

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main() {
    int N;
    while (cin >> N) {
        string ans = "";
        while (N != 0) {
            if (N % 2 == 0) {
                ans += "3";
                N = (N - 2) / 2;
            } else {
                ans += "2";
                N = (N - 1) / 2;
            }
        }
        reverse(ans.begin(), ans.end());
        cout << ans << endl;
    }
    return 0;
}

时间复杂度:O(logN),其中N为输入的整数。在每次循环中,N都会被除以2,直到N变为0。因此,循环次数为logN

空间复杂度:O(logN),主要是由字符串ans所占用的空间决定的。在每次循环中,都会向字符串ans中添加一个字符,最终字符串ans的长度为logN