#include #include #include #include using namespace std; char const * const sifir = "sifir"; char const * const birler[] = { "", "bir", "iki", "uc", "dort", "bes", "alti", "yedi", "sekiz", "dokuz" }; char const * const onlar[] = { "", "on", "yirmi", "otuz", "kirk", "elli", "atmis", "yetmis", "seksen", "doksan" }; char const * const yuz = "yuz"; char const * const katlar[] = { "", "bin", "milyon", "milyar", "trilyon", "katrilyon", "trilyar" }; typedef vector YaziParcalari; void parcaEkle(YaziParcalari & parcalar, char const * parca) { if (*parca) parcalar.push_back(parca); } typedef unsigned long SayiTuru; YaziParcalari parcaliTersYazi(SayiTuru sayi) { YaziParcalari parcalar; if (!sayi) { parcaEkle(parcalar, sifir); } else { int kat = 1; for (int hane = 0; sayi; ++hane, sayi /= 10) { int const haneDegeri = sayi % 10; switch (hane % 3) { case 0: { int const bindenKalan = sayi % 1000; if (hane == kat * 3) { if (bindenKalan) { parcaEkle(parcalar, katlar[kat]); } ++kat; } if ((kat != 2) || (bindenKalan != 1)) { parcaEkle(parcalar, birler[haneDegeri]); } break; } case 1: parcaEkle(parcalar, onlar[haneDegeri]); break; case 2: if (haneDegeri) { parcaEkle(parcalar, yuz); if (haneDegeri != 1) { parcaEkle(parcalar, birler[haneDegeri]); } } break; } } } return parcalar; } string yaziyla(SayiTuru sayi) { ostringstream cikis; YaziParcalari const parcalar(parcaliTersYazi(sayi)); copy(parcalar.rbegin(), parcalar.rend(), ostream_iterator(cikis, " ")); return cikis.str(); } int main() { while (cin) { SayiTuru sayi; cin >> sayi; if (cin) cout << yaziyla(sayi) << '\n'; } }