unsigned intが32ビットならこんな感じ?高速かどうかは知らないけどたぶん低メモリ
char a[] = "102002022201221111212";
char *p = a + strlen(a);
unsigned int m = 1;
unsigned int b = 0;
while (--p >= a) {
b += (*p - '0') * m;
m *= 3;
}
printf("%u\n", b);