using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program // Eingabe einlesen, ausgabe, neue Eingabe einlesen
{
static void Main(string[] args)
{
Console.WriteLine("Zahl eingeben:");
string eingabe = Console.ReadLine();
do
{
zahl a = new zahl();
string b = a.z(eingabe);
Console.WriteLine(b+"\n");
eingabe = Console.ReadLine();
} while (!string.IsNullOrEmpty(eingabe));
}
}
class zahl // hier wird umgewandelt
{
public static string[] zahlen; // Alle Namen für die Zahlen (1,2...11,12,16,17)
public static string[] zehner; // Alle Namen für Zehner-Stellen (10,20,30...90)
public static string[] potenzen; // 10^3, 10^6, 10^9.....
public static string eingabe;
public static string ausgabe;
public static string ze; // Zehner + Einer Stelle in Worten -> 256 -> sechsundfünfzig
public static string h; // hunderterstelle in Worten -> 256 -> zweihundert
public zahl() // erst mal alles zurücksetzen
{
zahlen = new string[19];
zehner = new string[10];
potenzen = new string[10];
eingabe = "";
ausgabe = "";
ze = "";
h = "";
}
public string z(string zahl)
{
zahlen[0] = "ein";
zahlen[1] = "eins";
zahlen[2] = "zwei";
zahlen[3] = "drei";
zahlen[4] = "vier";
zahlen[5] = "fünf";
zahlen[6] = "sechs";
zahlen[7] = "sieben";
zahlen[8] = "acht";
zahlen[9] = "neun";
zahlen[11] = "elf"; // notwendig, da sich dies nicht aus den Zahlen zusammensetzen lässt.
zahlen[12] = "zwölf";
zahlen[16] = "sechzehn";
zahlen[17] = "siebzehn";
zehner[0] = "zig"; // standard: zahl + zig -> vierzig, fünfzig usw....
zehner[1] = "zehn"; // lässt sich nicht aus zahl+zig zusammensetzen
zehner[2] = "zwanzig"; // "zweizig" gibt es halt nicht ;)
zehner[3] = "dreißig"; // .....
zehner[6] = "sechzig";
zehner[7] = "siebzig";
potenzen[0] = "hundert"; // zahl + hundert für hunderterstelle
potenzen[1] = "tausend"; // potenzen: 10^3,10^6....
potenzen[2] = "millionen";
potenzen[3] = "milliarden";
potenzen[4] = "billionen";
potenzen[5] = "billiarden";
potenzen[5] = "trillionen";
potenzen[5] = "trilliarden";
potenzen[5] = "quadrillionen";
potenzen[5] = "quadrilliarden";
eingabe = zahl;
float temp = eingabe.Length / 3; // in wieviele 3er Blöcke muss die eingabe zerlegt werden ?
int getrenntlength = Convert.ToInt32(temp) + 1; // 123456 -> 2 * 3er blöcke
char[][] getrennt = new char[(getrenntlength)][]; // hier werden 3er-Blöcke gespeichert
string[] getr = new string[getrenntlength]; // hier jeder 3er Block in Text umgewandelt
for (int i = 0; i < getrenntlength; i++) // eingabe in 3er Blöcke trennen
{
getrennt[i] = new char[3];
if ((eingabe.Length - 1) - i * 3 >= 0)
{
getrennt[i][0] = eingabe[(eingabe.Length - 1) - i * 3];
}
else
{
getrennt[i][0] = new char();
}
if ((eingabe.Length - 1) - i * 3 - 1 >= 0)
{
getrennt[i][1] = eingabe[(eingabe.Length - 1) - i * 3 - 1];
}
else
{
getrennt[i][1] = new char();
}
if ((eingabe.Length - 1) - i * 3 - 2 >= 0)
{
getrennt[i][2] = eingabe[(eingabe.Length - 1) - i * 3 - 2];
}
else
{
getrennt[i][2] = new char();
}
}
int j = 0; // Variable für Potenzen: wie vielter 3er Block wird gerade bearbeitet ? 1. -> 10^´3, 2.->10^6 .....
foreach (char[] chararr in getrennt)
{
h = ""; // hunderter stelle in worten
ze = ""; // zehner + einer stelle in worten
if (!char.IsNumber(chararr[0])) // wenn es einer stelle nicht gibt ist eigentlich was schief gelaufen beim zerlegen :D
{
continue;
}
if (char.IsNumber(chararr[2])) // wenn hunderterstelle existiert, wandle diese in worte um
{
//int hundert = Convert.ToInt32(chararr[2]);
int hundert = Int32.Parse(chararr[2].ToString()); // zahl ermitteln auf 100er stelle
if(hundert != 0) // wenn nich 0, z.B. 10.050 -> hier wäre beim 1. Block (050) 100er stelle = 0
{
if (hundert == 1) // EIN hundert , nicht EINS hundert
{
h = zahlen[0];
}
else
{
h = zahlen[hundert]; // zahl
}
h = h + potenzen[0]; // "hundert" an Zahl anhängen -> zwei,drei... HUNDERT.....
} else {
h = ""; // nullhundert sagt eben niemand
}
}
int ein = Int32.Parse(chararr[0].ToString()); // einerstelle
if (char.IsNumber(chararr[1])) // wenn 10er stelle im Block existiert -> 1024 -> hier gibt es in Block 2 (1 tausend) keine 10er stelle, nur einer.
{
int zehn = Int32.Parse(chararr[1].ToString());
if (ein == 0 && zehn == 0) // 100,200,300...900 -> nur einhundert, nicht: einhundert null und nullzig
{
ze = "";
}
else
{
if (ein == 0) // 110,120,230,450.... vierhundert fünfzig, nicht: vierhundert null und fünfzig
{
if (zehn == 1)
{
ze = zehner[1]; // 10
} else if(zehn == 2) {
ze = zehner[2]; // 20
}
else if (zehn == 6)
{
ze = zehner[6]; // 60
}
else if (zehn == 7)
{
ze = zehner[8]; // 80
}
else
{
ze = zahlen[zehn] + zehner[0]; // 30,40,50,70,90
}
} else if(zehn == 0)
{
ze = zahlen[ein]; // 105,106,107.... einhundert fünf, nicht einhundert fünf und nullzig
}
else if (zehn == 1) // 10..19
{
if (ein == 1)
{
ze = zahlen[11];
}
else if (ein == 2)
{
ze = zahlen[12];
}
else if (ein == 6)
{
ze = zahlen[16];
}
else if (ein == 7)
{
ze = zahlen[17];
}
else
{
ze = zahlen[ein] + zehner[1];
}
}
else if (zehn == 2) // 20..29
{
if (ein == 1)
{
ze = zahlen[0] + "und" + zehner[2];
}
else
{
ze = zahlen[ein] + "und" + zehner[2];
}
}
else if (zehn == 3) // 30..39
{
if (ein == 1)
{
ze = zahlen[0] + "und" + zehner[3];
}
else
{
ze = zahlen[ein] + "und" + zehner[3];
}
}
else if (zehn == 6) // 60..69
{
if (ein == 1)
{
ze = zahlen[0] + "und" + zehner[6];
}
else
{
ze = zahlen[ein] + "und" + zehner[6];
}
}
else if (zehn == 7) // 70..79
{
if (ein == 1)
{
ze = zahlen[0] + "und" + zehner[7];
}
else
{
ze = zahlen[ein] + "und" + zehner[7];
}
}
else // alle Zehner-Stellen, die sich aus Zahl + Zehnername darstellen lassen
{
if (ein == 1)
{
ze = zahlen[0] + "und" + zahlen[zehn] + zehner[0];
// EIN und fünfzig, nicht EINS und fünfzig
}
else
{
ze = zahlen[ein] + "und" + zahlen[zehn] + zehner[0];
// 1..9 und 4,5,8,9 zig
}
}
}
} // wenn 10er stelle nicht existiert, nur einerstelle auswerten
else
{
if (ein != 0)
{
ze = zahlen[ein]; // 1..9
} else if(j==0) {
ze = "Null"; // wenn j=0 -> erster Block und hier 10er stelle nicht existiert dann wurde nur 0 eingegeben -> Null als ausgabe
}
}
if (j > 0) // 10^3, 10^6, 10^3 .... anfügen
{
getr[j] = h + "-" + ze + " " + potenzen[j];
}
else
{
getr[j] = h + "-" + " " + ze; // wenn erster Block nichts anfügen
}
j++;
}
foreach (string g in getr) // Blöcke zusammenfügen
{
ausgabe = g +"\n"+ ausgabe;
}
return ausgabe; // ausgeben
}
}
}