#include #include #include #include int count(char* cislo, int len, int base) { int best[40]; memset(best, 0, sizeof(best)); best[0] = 1; //printf("len=%d\n", len); for (int i = 1; i <= len; i++) { int c = 0; int j = i - 1; bool zero = cislo[j] == '0'; while (j < len) { c = c*10 + cislo[j] - '0'; //printf("testing %d\n", c); if (c >= base) { //printf("failed\n"); break; } //printf("adding %d to pos. %d\n", best[i-1], j+1); best[j+1] += best[i-1]; ++j; if (zero) break; } } return best[len]; } int main() { char cislo[40]; for (;;) { fgets(cislo, 39, stdin); if (cislo[0] == '#') break; int c = 0, c1, base, i = strlen(cislo) - 2; cislo[i+1] = '\0'; do { if (cislo[i] != '0') { base = atoi(cislo + i); //printf("base=%d\n", base); c1 = count(cislo, i, base); //printf("c=%d\n\n", c1); c += c1; } --i; } while(/*c1 > 0 && */i > 0); if (c == 0) printf("The code is invalid.\n"); else printf("The code %s can represent %d numbers.\n", cislo, c); } return 0; }