Console.WriteLine("Добре дошли в първия превръщач на числа в думи!");
Console.WriteLine("Моля, изберете:");
Console.WriteLine("(1) Цифри => Думи");
Console.WriteLine("(2) Думи => Цифри");
String ans = Console.ReadLine();
Console.WriteLine("Въведете число с цифри: ");
long x = long.Parse(Console.ReadLine());
Console.WriteLine("Число с думи:\n" + sayNumber(x));
Console.WriteLine("\nИскаш ли пак? ");
String a = Console.ReadLine();
if(!a.ToLower().Equals("да")) kog = false;
}else if(ans.Equals("2")) {
Console.WriteLine("Въведете число с думи: ");
String x = Console.ReadLine();
Console.WriteLine("Число с цифри:\n" + dumaKumChislo(x.Split(' ')));
Console.WriteLine("\nИскаш ли пак? ");
String a = Console.ReadLine();
if(!a.ToLower().Equals("да")) kog = false;
static String[] broene = {"","един","два","три","четири","пет","шест","седем","осем","девет" };
static String[] kazwane = {"","едно","две","три","четири","пет","шест","седем","осем","девет" };
static String tripars(int xyz, bool br) {
String razdelitel = "и ";
String returnString = "";
int x = xyz/100, y = xyz/10%10, z = xyz%10;
if(x==1) returnString+="сто ";
else if(x==2) returnString+="двеста ";
else if(x==3) returnString+="триста ";
else returnString+=broene[x] + "стотин ";
if(z==0&&y!=0 || (z+y*10)<20&&(z+y*10)>0&&x!=0) { if(xyz!=10) returnString+=razdelitel; }
if(y==1 && z!=0) returnString+=(xyz!=11)?broene[z] + "найсет ":"единайсет";
returnString+=(y==1&&z==0)? "десет ":broene[y] + "десет ";
if(z!=0) returnString+=razdelitel;
returnString+=(br) ? broene[z] : kazwane[z];
static String sayNumber(long num) {
String returnString = "";
num*=-1; returnString+="минус "; }
int edinici = (int) (num%1000);
int hiliadi = (int) (num/1000%1000);
int milioni = (int) (num/1000000%1000);
int miliardi = (int) (num/1000000000%1000);
int bilioni = (int) (num/Math.Pow(10, 12)%1000);
int trilioni = (int) (num/Math.Pow(10, 15)%1000);
int shibaniona = (int) (num/Math.Pow(10, 18)%1000);
returnString+=tripars((int) shibaniona,br) + ((shibaniona!=1) ? " шибаниона ":" шибанион ");
returnString+=tripars((int) trilioni,br) + ((trilioni!=1) ? " скапаниона ":" скапанион ");
returnString+=tripars((int) bilioni,br) + ((bilioni!=1) ? " катральона ":" катральон ");
returnString+=tripars(miliardi,br) + ((miliardi!=1) ? " милиарда ":" милиард ");
if(!tripars(milioni,br).Contains("и")&&miliardi>0&&milioni>0) returnString += "и ";
returnString+=tripars(milioni,br) + ((milioni!=1) ? " милиона ":" милион ");
if(!tripars(hiliadi,br).Contains("и")&&(milioni>0||miliardi>0)&&hiliadi>0) returnString += "и ";
returnString+=((hiliadi!=1) ? tripars(hiliadi,br) + " хиляди ":"хиляда ");
if(!tripars(edinici,br).Contains(" и ")&&(hiliadi>0||milioni>0||miliardi>0)&&edinici>0) returnString += "и ";
returnString+=tripars(edinici,br);
if(num==0) returnString = "нула";
static long dumaKumChislo(String[] dumi) {
for(int g = 0; g<dumi.Length; g++) dumi[g]=dumi[g].ToLower(); bool numNegativ = false;
long returnInt = 0; String[] tripars = new String[10];
string[] ex = {"нула","едно","две","три","четири","пет","шест","седем","осем","девет"};
string[] br = {"нула","един","два","три","четири","пет","шест","седем","осем","девет"};
string[] ad = {"","надесет","десет","стотин","сто","двеста","триста","единадесет"};
string[] big = {"хиляда","хиляди","милион","милиона","милиард","милиарда"};
int pars = 0; String numTri = "";
for(int s=0; s<dumi.Length; s++) {
if(s==0 && dumi[s].Equals("минус")) numNegativ = true;
for(int m=0; m<big.Length; m++) {
if(dumi[s].Equals(big[m]) || dumi[s].Equals("минус")) {
foreach(String q in tripars) if(q!=null) numTri+=q+" ";
prev = dumaKumChislo(numTri.Split(' ')); numTri="";
split = true; pars=0; for(int l=0; l<tripars.Length; l++) tripars[l]=null;
if(!split) { tripars[pars]=dumi[s]; pars++; }
for(int i=0; i<ex.Length; i++) {
if(dumi[s].Equals(ex[i])) returnInt+=i;
else if(dumi[s].Equals(br[i])) returnInt+=i;
if(dumi[s].Equals(ad[2])) returnInt+=10;
if(dumi[s].Equals(ad[4])) returnInt+=100;
if(dumi[s].Equals(ad[5])) returnInt+=200;
if(dumi[s].Equals(ad[6])) returnInt+=300;
if(dumi[s].Equals(ad[7])) returnInt+=1;
if(dumi[s].Contains(ad[1]))
returnInt+=dumaKumChislo(dumi[s].Replace("надесет", "").Split(' '))+10;
else if(dumi[s].Contains(ad[2]))
returnInt+=dumaKumChislo(dumi[s].Replace("десет", "").Split(' '))*10;
else if(dumi[s].Contains(ad[3]))
returnInt+=dumaKumChislo(dumi[s].Replace("стотин", "").Split(' '))*100;
if(dumi[s].Equals(big[0])) returnInt+=1000;
if(dumi[s].Equals(big[1])) returnInt+=(prev*1000)-prev;
if(dumi[s].Equals(big[2])) returnInt+=1000000;
if(dumi[s].Equals(big[3])) returnInt+=(prev*1000000)-prev;
if(dumi[s].Equals(big[4])) returnInt+=1000000000;
if(dumi[s].Equals(big[5])) returnInt+=(prev*1000000000)-prev;
return (numNegativ) ? returnInt*=-1 : returnInt;