我来写一个超时版本:

#include<stdio.h>

#include<string.h>

int main()

{

char A[110],B[110];

while(gets(A)){

int i,j,n=strlen(A),cnt=0;

for(i=0;i<n;i++)B[i]='0';

while(strcmp(A,B)!=0)

{

B[n-1]++;

for(j=n-1;j>0;j--)

{

if(B[j]=='1'||B[j]=='2')cnt++;

if(B[j]>'9')

{

B[j-1]++;

B[j]-=10;

}

}

if(B[0]=='1'||B[0]=='2')cnt++;

}

printf("%d\n",cnt%20123);

for(i=0;i<n;i++)B[i]=A[i]='\0';}

return 0;

}