एक इंटीजर के मानव पठनीय प्रतिनिधित्व करना

यहां उन लोगों के लिए कोडिंग समस्या है जो इस तरह की चीज़ पसंद करते हैं। आइए आपके कार्यान्वयन (अपनी पसंद की भाषा में, निश्चित रूप से) एक फ़ंक्शन के देखें जो एक निर्दिष्ट इंटीजर का मानव पठनीय स्ट्रिंग प्रतिनिधित्व देता है। उदाहरण के लिए:

  • humanReadable(1) returns "one".
  • humanReadable(53) returns "fifty-three".
  • humanReadable(723603) returns "seven hundred and twenty-three thousand, six hundred and three".
  • humanReadable(1456376562) returns "one billion, four hundred and fifty-six million, three hundred and seventy-six thousand, five hundred and sixty-two".

विशेष रूप से चालाक/सुरुचिपूर्ण समाधान के लिए बोनस अंक!

यह एक व्यर्थ अभ्यास की तरह प्रतीत हो सकता है, लेकिन इस तरह के एल्गोरिदम के लिए वास्तविक दुनिया के अनुप्रयोग हैं (हालांकि एक अरब के रूप में उच्च संख्या के समर्थन संख्या अधिक हो सकती है :-)

0
ro fr bn
किसी के लिए कैसे करना है उदाहरण के लिए googling 12254 12254 से कर सकते हैं कर सकते हैं 12254.to_s.reverse.split ('')। प्रत्येक_स्लिस (3) .to_a.map {| x | एक्स = x.j और जेडडब्ल्यूएनजे;। oin() रिवर्स} .rever और जेडडब्ल्यूएनजे; se.join ( ',')
जोड़ा लेखक xxjjnn, स्रोत
होमवर्क या साक्षात्कार प्रश्न की तरह लगता है, आपको वास्तव में यह स्वयं करना चाहिए।
जोड़ा लेखक leppie, स्रोत

5 उत्तर

99 9 मिलियन तक का समर्थन करता है, लेकिन कोई नकारात्मक संख्या नहीं:

String humanReadable(int inputNumber) {
  if (inputNumber == -1) {
    return "";
  }
  int remainder;
  int quotient;
  quotient = inputNumber/1000000;
  remainder = inputNumber % 1000000;
  if (quotient > 0) {
    return humanReadable(quotient) + " million, " + humanReadable(remainder);
  }
  quotient = inputNumber/1000;
  remainder = inputNumber % 1000;
  if (quotient > 0) {
    return humanReadable(quotient) + " thousand, " + humanReadable(remainder);
  }
  quotient = inputNumber/100;
  remainder = inputNumber % 100;
  if (quotient > 0) {
    return humanReadable(quotient) + " hundred, " + humanReadable(remainder);
  }
  quotient = inputNumber/10;
  remainder = inputNumber % 10;
  if (remainder == 0) {
    //hackish way to flag the algorithm to not output something like "twenty zero"
    remainder = -1;
  }
  if (quotient == 1) {
    switch(inputNumber) {
    case 10:
      return "ten";
    case 11:
      return "eleven";
    case 12:
      return "twelve";
    case 13:
      return "thirteen";
    case 14:
      return "fourteen";
    case 15:
      return "fifteen";
    case 16:
      return "sixteen";
    case 17:
      return "seventeen";
    case 18:
      return "eighteen";
    case 19:
      return "nineteen";
    }
  }
  switch(quotient) {
  case 2:
    return "twenty " + humanReadable(remainder);
  case 3:
    return "thirty " + humanReadable(remainder);
  case 4:
    return "forty " + humanReadable(remainder);
  case 5:
    return "fifty " + humanReadable(remainder);
  case 6:
    return "sixty " + humanReadable(remainder);
  case 7:
    return "seventy " + humanReadable(remainder);
  case 8:
    return "eighty " + humanReadable(remainder);
  case 9:
    return "ninety " + humanReadable(remainder);
  }
  switch(inputNumber) {
  case 0:
    return "zero";
  case 1:
    return "one";
  case 2:
    return "two";
  case 3:
    return "three";
  case 4:
    return "four";
  case 5:
    return "five";
  case 6:
    return "six";
  case 7:
    return "seven";
  case 8:
    return "eight";
  case 9:
    return "nine";
  }
}
0
जोड़ा
आप भाषा को बताना भूल गए।
जोड़ा लेखक Lightness Races in Orbit, स्रोत

इस कार्य कार्यान्वयन के बारे में एक बड़ी समस्या है। यह भविष्य का स्थानीयकरण है। अंग्रेजी मूल निवासी द्वारा लिखित यह कार्य, शायद अंग्रेजी की तुलना में किसी भी अन्य भाषा के लिए सही काम नहीं करेगा। दुनिया में किसी भी मानव भाषा बोली के लिए सामान्य आसान स्थानीयकरण योग्य कार्य लिखना लगभग असंभव है, जब तक आपको वास्तव में इसे सामान्य रखने की आवश्यकता न हो। असल में वास्तविक दुनिया में आपको विशाल पूर्णांक संख्याओं के साथ काम करने की आवश्यकता नहीं है, इसलिए आप केवल सभी संख्याओं को एक बड़े (या यहां तक ​​कि इतनी बड़ी नहीं) स्ट्रिंग सरणी में रख सकते हैं।

0
जोड़ा
प्रत्येक भाषा में लिखित-आउट संख्याएं कैसे काम करती हैं, इस बारे में सीएलडीआर में जानकारी है, लेकिन मुझे वास्तव में संख्याएं उत्पन्न करने के लिए इसके साथ काम करने के लिए कोई उदाहरण कोड नहीं मिला।
जोड़ा लेखक Random832, स्रोत

There was already a question about this: Convert integers to written numbers

जवाब सी # के लिए है, लेकिन मुझे लगता है कि आप इसे समझ सकते हैं।

0
जोड़ा

इस बात पर सहमति हुई कि कई वास्तविक विश्व अनुप्रयोग हैं। क्योंकि इस तरह पहले से ही वास्तविक दुनिया के कार्यान्वयन हैं।

यह bsdgames का हिस्सा रहा है क्योंकि काफी हमेशा के लिए ...

> man number
0
जोड़ा
using System;

namespace HumanReadable
{
    public static class HumanReadableExt
    {
        private static readonly string[] _digits = {
                                                       "", "one", "two", "three", "four", "five",
                                                       "six", "seven", "eight", "nine", "eleven", "twelve",
                                                       "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
                                                       "eighteen", "nineteen"
                                                   };

        private static readonly string[] _teens = {
                                                      "", "", "twenty", "thirty", "forty", "fifty",
                                                      "sixty", "seventy", "eighty", "ninety"
                                                  };

        private static readonly string[] _illions = {
                                                        "", "thousand", "million", "billion", "trillion"
                                                    };

        private static string Seg(int number)
        {
            var work = string.Empty;

            if (number >= 100) 
                work += _digits[number/100] + " hundred ";

            if ((number % 100) < 20)
                work += _digits[number % 100];
            else
                work += _teens[(number % 100)/10] + "-" + _digits[number % 10];

            return work;
        }

        public static string HumanReadable(this int number)
        {
            if (number == 0)
                return "zero";
            var work = string.Empty;

            var parts = new string[_illions.Length];

            for (var ind = 0; ind < parts.Length; ind++)
                parts[ind] = Seg((int) (number % Math.Pow(1000, ind + 1)/Math.Pow(1000, ind)));

            for (var ind = 0; ind < parts.Length; ind++)
                if (!string.IsNullOrEmpty(parts[ind]))
                    work = parts[ind] + " " + _illions[ind] + ", " + work;

            work = work.TrimEnd(',', ' ');

            var lastSpace = work.LastIndexOf(' ');
            if (lastSpace >= 0)
                work = work.Substring(0, lastSpace) + " and" + work.Substring(lastSpace);

            return work;
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine(1.HumanReadable());
            Console.WriteLine(53.HumanReadable());
            Console.WriteLine(723603.HumanReadable());
            Console.WriteLine(1456376562.HumanReadable());
            Console.ReadLine();
        }
    }
}
0
जोड़ा