2010-04-28 17 views
51
करने के लिए परिवर्तित संख्या

संभव डुप्लिकेट:
How can I convert an integer into its verbal representation?शब्द सी #

किसी को भी मुझे मैं शब्दों में संख्या परिवर्तित करने में पर काम कर सकता था एक प्राइमर कोड दे सकते हैं?

शब्द उदाहरण (-1000 से 1000 तक) में कनवर्ट कर रहा संख्या: 1000 -> एक हजार

+15

होमवर्क की तरह लगता है –

+0

संख्याओं को तारों में परिवर्तित करने के रूप में? या उस संख्या के शब्द प्रस्तुतिकरणों में संख्याओं को परिवर्तित करना, उदा। 2030 = दो हजार तीस? – froadie

+0

क्या आपने पहले कोई खोज की थी?=/ – Jens

उत्तर

-5

आप वास्तव में के बारे में तुम क्या मतलब है अधिक जानकारी प्रदान करने की आवश्यकता है। क्या आपका मतलब "शब्द" या "तार" है?

int i = 123; 
string text = i.ToString(); 

वास्तव में, आप भी ऐसा कर सकते हैं:

(123).ToString(); // u need to put number in parenthesis 

उदाहरण के लिए, यदि आप एक स्ट्रिंग में एक नंबर परिवर्तित करना चाहते हैं, तो आप केवल कुछ इस तरह आवश्यकता होगी

और यहां तक ​​कि

(123.5).ToString(); // this always trips me out 
हालांकि

, यदि आपमें 123 बदलने की आवश्यकता 210, तो आपको अधिक पार्सिंग करने की आवश्यकता है। आपको संख्या को अपने हिस्सों में तोड़ना होगा, जैसे सैकड़ों, दसवां, और इसी तरह।

ब्रेकडाउन शुरू करने के लिए आप स्ट्रिंग लम्बाई (इनट्स के लिए) प्राप्त करके शुरू कर सकते हैं। उदाहरण के लिए, 123 में 3 अंक हैं, इसलिए एन = 3 और i = 1. दें, इसके बाद आप 123 से 10 (नी), या 100 को विभाजित करके शुरू करेंगे। यह आपको देता है 1. अब आप जानते हैं कि शब्द "एक के साथ शुरू होगा सौ"। फिर मैं वृद्धि करता हूं, उस संख्या को घटाएं (100) और 10 (एन-आई), या 10 से विभाजित करें - यह आपको देता है 2. इसे एन == i तक करें।

उम्मीद है कि इससे मदद मिलती है। आपको वास्तव में अपना प्रश्न संपादित करना चाहिए।

+0

@ जुआन: ठीक है, अब मैं देखता हूं कि आपने अपना प्रश्न संपादित किया है। मुझे लगता है कि मेरा जवाब आपको सही दिशा में ले जाएगा। – Dave

+0

लेकिन एक समस्या है। उदाहरण के लिए, यदि आपके पास 5 अंकों या 6 अंकों के साथ संख्याएं हैं, तो ... आपकी विधि काम नहीं करती है। उदाहरण के लिए, इस संख्या में 12341 हमें बारह हजार मिलना चाहिए था ... लेकिन आपकी विधि बारह हजार नहीं कह सकती है। – Martin

+0

@ मार्टिन ट्रू। लेकिन पहले से ही एक बेहतर जवाब है। – Dave

1

जब मुझे इस समस्या को हल करना पड़ा, तो मैंने संख्याओं और उनके संबंधित शब्दों के बीच मानचित्र बनाने के लिए एक हार्ड-कोडित डेटा शब्दकोश बनाया। उदाहरण के लिए, निम्नलिखित शब्दकोश में कुछ प्रविष्टियों का प्रतिनिधित्व कर सकते:

{1, "one"} 
{2, "two"} 
{30, "thirty"} 

आप वास्तव में केवल 10^0 में मानचित्रण संख्या (1,2,3, आदि) और 10^1 के बारे में चिंता करने की जरूरत (10,20,30) पदों के कारण, जब आप 100 तक पहुंच जाते हैं, तो आपको बस अपने मानचित्र के साथ संयोजन में सौ, हजार, मिलियन इत्यादि जैसे शब्दों का उपयोग करना होगा। उदाहरण के लिए, आप 3,240,123 की तरह एक संख्या है जब, आपको मिलता है: तीन लाख दो सौ चालीस हजार एक सौ तेईस

अपना नक्शा बनाने के बाद, आपको अपने नंबर में प्रत्येक अंक के माध्यम से काम करने की आवश्यकता है और इसके साथ जाने के लिए उचित नामकरण पता लगाना चाहिए।

161
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

ने इसे एक साफ एक्सटेंशन विधि बना दिया है, यदि आपको कोई फर्क नहीं पड़ता .. – nawfal

+0

@nawfal: नंबर संपादन के लिए रिकर्सन आपके संपादन के बाद सही नहीं है। –

+3

@tomp मैं पिछले संस्करण पर वापस लुढ़का, क्योंकि मैं टाइपो को सही नहीं कर सका, लेकिन यह एक int पर एक विस्तार विधि अच्छा नहीं लग रहा है .. – nawfal

संबंधित मुद्दे