#include #include #include /* THIS IS NOT BUGLESS! 1100 SHOULD NOT BE "YKSITUHATTA SATANOLLA" :) */ static const char *num[] = {"m","b","tr","kvint","kvardr","sekst","sept", "okt","nov","dek","undek","duodek","tredek", "kvardek","kvindek","seksdek","septendek", "oktondek","duodevigint","undevigint","vigint"}; static const char ext[2][5] = {"oona","ardi"}; static const char *yx[12] = { "nolla","yksi","kaksi","kolme","neljä","viisi", "kuusi","seitsemän","kahdeksan","yhdeksän","kymmenen","monta"}; static const char *dah[6] = {"kymmentä","sataa","tuhatta","toista","sata","tuhat"}; static void Sano(const char *s, int from, int to, int pakkoyksi) { int max; s += from; max = to - from; if(max>=2) switch(s[2]%'0') { case 0: break; case 1: printf(dah[4]); break; default: printf("%s%s", yx[(int)s[2]%'0'], dah[1]); } if(!max)goto Zapp; switch(s[1]%'0') { case 0: Zapp: printf(yx[(int)s[0]%'0']); break; case 1: if(s[0]%'0') printf("%s%s", yx[(int)s[0]%'0'], dah[3]); else printf(yx[10]); break; default: printf("%s%s", yx[(int)s[1]%'0'], dah[0]); if(s[0]%'0')printf(yx[(int)s[0]%'0']); } } static void SanoLuku(char *s, int b) { int c, n; for(; ; b=c-1) { c = (b/3)*3; n = (c-6)/6; if(n >= (int)sizeof(num)/(int)sizeof(num[0])) { printf(yx[11]); n = sizeof(num)/sizeof(num[0])-1; c = n*6+9; } else Sano(s, c, b, !c); if(!c)break; if(c>3) printf(" %silj%sa ", num[n], ext[(c/3)&1]); else printf("%s ", dah[2]); } } int main(int argc, char **argv) { int a,b,c,d=16,m=0; char *s; if(--argc)d = atoi(*++argv); b = d/3+9; s = malloc(d); for(s[a=0]=1; ++a