#include <bits/stdc++.h>
using namespace std;
char ch[260];
int a[260], b[260], ans[260];
int n, &alen = a[0], &blen = b[0], &clen = ans[0];
bool cmp(int a[], int b[]) { /* a < b*/
if (a[0] != b[0]) return a[0] < b[0];
int i;
for (i = a[0]; a[i] == b[i]; i--);
return i && a[i] < b[i];
}
void dfs(int key, int n) {
if (n == 0) {
for (int i = key; i <= alen; i++)
b[++blen] = a[i];
int cnt = 0;
for (; b[blen] == 0 && blen >= 2; blen--) cnt++;
if (cmp(b, ans))
memcpy(ans, b, sizeof ans);
for (int i = key; i <= alen; i++) blen--;
blen += cnt;
return;
}
if (key > alen)
return;
if (cmp(ans, b)) return;
blen++;
b[blen] = a[key];
dfs(key + 1, n);
b[blen] = 0;
blen--;
dfs(key + 1, n - 1);
}
int main() {
cin >> (ch + 1) >> n;
alen = strlen(ch + 1);
blen = 0;
for (int i = 1; i <= alen; i++)
a[i] = ch[alen - i + 1] - '0';
int inf = (1 << 30) - 1 + (1 << 30);
for (clen; inf; clen++) {
ans[clen] = inf % 10;
inf /= 10;
}
for (int i = 1; i <= 50; i++) {
inf = (1 << 15) - 1 + (1 << 15);
for (int j = 1; j <= clen; j++)
ans[j] *= inf;
for (int j = 1; j <= clen; j++) {
ans[j + 1] += ans[j] / 10;
ans[j] %= 10;
if (ans[clen + 1]) clen++;
}
}
dfs(1, n);
for (int i = clen; i; i--)
cout << ans[i];
return 0;
}
我写的DFS怎么优化