PKU2247

http://acm.pku.edu.cn/JudgeOnline/problem?id=2247
PKU2247でOzyさんがJavaでコードを書いています。
折角だからそれを素直にCに移植+適当短縮してみたり。

s[6000],i,j,A[4];
t(n){
	return""[n]*s[A[n]];/* 文字列の中身は"\2\3\5\7" */
}
main(k){
	for(*s=1;++i<6e3;){
		for(j=k=0;++j<4;)
			k=t(j)<t(k)?j:k;
		for(s[i]=t(k);j--;)
			A[j]+=t(j)==s[i];
	}
	while(scanf("%d",&i),i)
		printf("The %d%s humble number is %d.\n",i,
			i/10%10-1?i%10-1?i%10-2?i%10-3?
				"th":"rd":"nd":"st":"th",
			s[i-1]);
}