2016-03-24 4 views
0

Dieses Stück Code, das ich von einer anderen Seite auf Stackoverflow gefunden habe, wandelt Zahlen in die richtige Nomenklatur in ihre verbalen Gegenstücke um. Der Code funktioniert gut, aber ich kann meinen Kopf um nicht arbeiten, warum zum Beispiel, wenn ich Eingang 1000000 (1000000)Wie wird dieser Integer-Wert in diesem Programm in eine Zeichenfolge umgewandelt? (Details innerhalb)

if ((number/1000000) > 0) 
{ 
    words += NumberToWords(number/1000000) + " Million "; 
    number %= 1000000; 
} 

Hier ist der Teil, den ich verwirrt, weist er die Zeichenfolge Worte [NumberToWords(number/1000000) + " Million ". Ich erhalte die Million Teil aber wie funktioniert das Programm Figur aus dem ersten Teil der Zeichenfolge ist in der Tat „One“

Hier ist der vollständige Code:

Console.WriteLine("Please enter a number to convert [Between 1 and 1 million]:"); 

int intUser = Int32.Parse(Console.ReadLine()); 
Console.WriteLine("{0}", NumberToWords(intUser)); 
Console.ReadKey(); 

public static string NumberToWords(int number) 
{ 
    if (number == 0) 
     return "Zero"; 

    if (number < 0) 
     return "Minus " + NumberToWords(Math.Abs(number)); 

    string words = ""; 

    if ((number/1000000) > 0) 
    { 
     words += NumberToWords(number/1000000) + " Million "; 
     number %= 1000000; 
    } 

    if ((number/1000) > 0) 
    { 
     words += NumberToWords(number/1000) + " Thousand "; 
     number %= 1000; 
    } 

    if ((number/100) > 0) 
    { 
     words += NumberToWords(number/100) + " Hundred "; 
     number %= 100; 
    } 

    if (number > 0) 
    { 
     if (words != "") 
      words += "and "; 

     var unitsMap = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; 
     var tensMap = new[] { "Zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; 

     if (number < 20) 
      words += unitsMap[number]; 
     else 
     { 
      words += tensMap[number/10]; 

      if ((number % 10) > 0) 
       words += "-" + unitsMap[number % 10]; 
     } 
    } 

    return words; 
} 
+0

im Wesentlichen 'Fünf' ergibt, es rekursive Konzept und Integer-Division verwendet ... noch der Code sieht ziemlich gut geschrieben – Ian

+0

Könnten Sie dieses Konzept erklären zu mir im Zusammenhang mit diesem Programm, ich bin gerade in C# – Adib

+0

Folgen Sie den Code mit einem Debugger, oder einfach nur zu lesen. Stellen Sie sich vor, dass "intUser" auf "1.000.000" eingestellt ist. Als erstes rufen Sie 'words + = NumberToWords (number/1000000) +" Million ";'. Es übergibt den Wert "1" an "NumberToWords". Dann folge diesem Pfad erneut. Diesmal kommt nur das letzte 'if' (' Nummer> 0') hinzu. Die Zahl ist '<20', also' words + = unitsMap [1] '(welches oben auf 'One' gesetzt ist). – Rob

Antwort

1

Es ist eine rekursive Funktion, die sich für jeden ruft Nummer in der Zeichenfolge. Eine einzelne Zahl wird als Index verwendet, um den Zeichenfolgenwert aus dem Array abzurufen.

dh

var unitsMap = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; 

Beispiel - unitMap[5] würde

Verwandte Themen