#include #include #define MAX 40 int main() { char buffer[MAX], *pbaze, *pi; int start[MAX], lbaze, length, i, j, pocet; while(scanf("%s", buffer), *buffer != '#') { pocet = 0; if(*buffer == '0') goto nelze; length = strlen(buffer); for(lbaze = 1, pbaze = buffer + length - 1; pbaze > buffer; pbaze--, lbaze++) { if(*pbaze == '0') continue; start[length - lbaze] = 1; for(i = length - lbaze - 1; i >= 0; i--) { pi = buffer + i; if(*pi == '0') { start[i] = start[i+1]; continue; } // printf("pi=%s pbaze=%s, lbaze=%d, i=%d, pocet=%d\n", pi, pbaze, lbaze, i, pocet); start[i] = 0; if(lbaze <= pbaze - pi) { for(j = 1; j < lbaze; j++) start[i] += start[i+j]; if(strncmp(pi, pbaze, lbaze) < 0) if(lbaze == pbaze - pi) start[i]++; else start[i] += start[i+lbaze]; } else { for(j = pbaze-pi; j; j--) start[i] += start[i+j]; } // printf("%d\n", start[i]); } pocet += start[0]; } if(pocet == 0) goto nelze; printf("The code %s can represent %d numbers.\n", buffer, pocet); continue; nelze: printf("The code %s in invalid.\n", buffer); } return 0; }