2016-03-24 19 views
0

Stackoverflow'daki başka bir sayfadan bulduğum bu kod, doğru adlandırmada sayıları sözel karşılıklarına dönüştürür. kod çalışıyor ama mesela ben girişi 1000000 (1 milyon)Bu tamsayı değeri bu programdaki bir dizgeye nasıl dönüşür? (İçindekiler)

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

Burada beni karıştırıyor parçası ise, neden kafamı çalışamaz, bu dize kelimeleri [NumberToWords(number/1000000) + " Million " atar.

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

esasen, bu özyinelemeli kavram ve tamsayı bölme ... hala, kod oldukça – Ian

+0

bu kavramı açıklayabilir iyi yazılmış görünüyor kullanır bana bu program bağlamında, ben sadece C içine alıyorum # – Adib

+0

Kodu bir hata ayıklayıcı ile veya sadece okuma. 'IntUser' inin '1,000,000' olarak ayarlandığını hayal edin. Yaptığı ilk şey, kelimeler + = NumberToWords (sayı/1000000) + "Milyon"; "1" değerini "NumberToWords" içine geçiriyor. Sonra tekrar o yolu takip et. Bu kez sadece son 'if' ('number> 0') girer. Sayı '<20', yani '+ kelimelerdir unitMap [1]' ('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Rob

cevap

1

Her için kendisini çağıran bir özyinelemeli fonksiyon: Ben milyon parçasını almak ama nasıl dizesinin ilk bölümü dışarı programı rakam gerçekten de yok "biri" İşte

tam koddur dizgideki sayı. Dizeden dize değerini almak için bir indeks olarak tek bir sayı kullanılır.

yani

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

Örnek - unitMap[5] doğuracak 'Beş'

İlgili konular