直接将二进制转化成十进制,注意顺序

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n, m, a[1000], b[10], pos[10], flag = 0;
char str[1000];

int change() {
int sum = 0;
for (int i = 0; i < n; i++) sum = sum * 2 + b[i];
return sum;
}

int main()
{
while (scanf("%d", &n) == 1 && n) {
for (int i = 0; i < n; i++) {
cin >> str;
pos[str[1] - '1'] = i;
}
cin >> str;
for (int i = 0; i < (1<<n); i++) {
a[i] = str[i] - '0';
}
scanf("%d", &m);
printf("S-Tree #%d:\n", ++flag);
while (m--) {
cin >> str;
for (int i = 0; i < n; i++) b[pos[i]] = str[i] - '0';
printf("%d", a[change()]);
}
printf("\n\n");
}
return 0;
}