英文单词的整数


难度级别
经常问 亚马逊 Facebook 微软 神谕

在问题“整数转换为英语单词”中,我们给出了一个非负整数,并将该整数转换为其数字单词的任务是,或者我们得到了一个数字,任何数字的输入,而我们的任务是在一个整数中表示该数字。 绳子 形式。 让我们看一个例子,数字“ 765”应表示为“七百六十五”。 这样我们就可以处理数字中的每个特定数字。

使用案列

输入:

123

输出:

一百二十三

输入:

4517

输出:

四千五百一十七

您必须编写一个程序以将任何整数转换为数字单词形式

算法

  1. 声明一个Long Integer变量并获取输入。
  2. 声明 排列 在一个地方放置所有的单词,并对其进行初始化;在另一个地方放置几十个数组,并使用代码编写的数十个单词进行初始化。
  3. 将带有适当字符串的该数字的除数传递给该函数,该函数可以得到一个和十个单词并将其添加到临时字符串中。
  4. 返回该临时字符串。
  5. 该函数可以在一个位置上工作,并且数十个位置可以从数组中为其获取合适的单词并将其存储在字符串结果中。
  6. 并且它将一直附加字符串,直到到达数字位置为止。
  7. 然后,我们得到一个数字输出,该数字表示为一个字符串。

说明

我们的主要思想是从最大值开始。 这样声明的两个数组,其中一个存储所有小于20的单词,而一个存储所有值,其中存储的所有100的倍数都小于XNUMX,如代码所示。

因此,我们将通过一个示例进行介绍。

输入为56543

我们接受输入并将其传递给函数getWords,在此我们声明字符串结果,然后我们将传递除数。 因此,首先将要通过的将数字除以10000000,我们将得到除数为0的结果。0通过字符串crore传递。 它将出现在Words函数中,它会检查0th 十和一无所知的地方,现在返回一个空的临时字符串。

因此,现在要通过将数字除以100000并以100进行模数化的数字,则得到的股息为0。现在通过字符串lakh传递0。 它将出现在Words函数中,它会检查0th 十位和一位的位置,它什么也找不到,现在返回一个空的临时字符串。

因此,现在将要通过数字,该数字将数字除以1000,然后将其除以100,得到0的分红,现在以字符串56传递5。 它将出现在Words函数中,在该函数中,将红利作为6,将余数作为XNUMX,字符串通过作为千,所有这些都存储在临时字符串中,即“五万六千”,并返回结果。

现在,将通过将数字除以100并乘以10的模的数字,我们将得到5的红利。现在,以字符串5传递5。 它将出现在Words函数中,该函数将被除数为0。将余数作为XNUMX传递的字符串为XNUMX,因此在数组中搜索并将其添加到临时字符串后,其结果将变为“五千六百五百”。

现在检查是否阻塞,它将打印“ and”,然后再次打印。 将通过与100模块化并通过43的数字。然后,将得到的分红为4,余数为3,这被存储在临时字符串中。 在找出给定数字和温度的单词后,返回结果。

现在的结果将是“五千六百五十四十三”。

实施

整数到英语单词的C ++程序

#include <iostream>
using namespace std;

string ones_place[] = { "", "one ", "two ", "three ", "four ",
                        "five ", "six ", "seven ", "eight ",
                        "nine ", "ten ", "eleven ", "twelve ",
                        "thirteen ", "fourteen ", "fifteen ",
                        "sixteen ", "seventeen ", "eighteen ",
                        "nineteen "
                      };

string tens_place[] = { "", "", "twenty ", "thirty ", "forty ",
                        "fifty ", "sixty ", "seventy ", "eighty ",
                        "ninety "
                      };

string Words(int num, string s)
{
    string temp = "";
    if (num > 19)
    {
        temp += tens_place[num / 10] + ones_place[num % 10];
    }
    else
    {
        temp += ones_place[num];
    }
    if (num)
    {
        temp += s;
    }
    return temp;
}

string getWords(long number)
{
    string result;
    result += Words((number / 10000000), "crore ");

    result += Words(((number / 100000) % 100), "lakh ");

    result += Words(((number / 1000) % 100), "thousand ");

    result += Words(((number / 100) % 10), "hundred ");

    if (number> 100 && number % 100)
    {
        result += "and ";
    }
    result += Words((number % 100), "");

    return result;
}
int main()
{
    cout << getWords(4517) << endl;
    return 0;
}
four thousand five hundred and seventeen

Java程序,用于整数到英语单词

import java.text.DecimalFormat;

public class Integer_to_words {

  private static final String[] tens_names = {
    "", " ten", " twenty",
    " thirty", " forty", " fifty", " sixty", " seventy", " eighty",
    " ninety"
  };

  private static final String[] num_Names = {
    "", " one", " two", " three",
    " four", " five", " six", " seven", " eight", " nine", " ten",
    " eleven", " twelve", " thirteen", " fourteen", " fifteen",
    " sixteen", " seventeen", " eighteen", " nineteen"
  };

  private static String Upto_one_thousand(int number) {
    String soFar;

    if (number % 100<20) {
      soFar = num_Names[number % 100];
      number /= 100;
    } else {
      soFar = num_Names[number % 10];
      number /= 10;

      soFar = tens_names[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0)
      return soFar;
    return num_Names[number] + " hundred" + soFar;
  }

  public static String convert(long number) {
    // 0 to 999 999 999 999
    if (number == 0) {
      return "zero";
    }

    String snumber = Long.toString(number);

    // pad with "0"
    String mask = "000000000000";
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);

    // XXXnnnnnnnnn
    int billions = Integer.parseInt(snumber.substring(0, 3));
    // nnnXXXnnnnnn
    int millions = Integer.parseInt(snumber.substring(3, 6));
    // nnnnnnXXXnnn
    int hundredThousands = Integer.parseInt(snumber.substring(6, 9));
    // nnnnnnnnnXXX
    int thousands = Integer.parseInt(snumber.substring(9, 12));

    String tradBillions;
    switch (billions) {
      case 0:
        tradBillions = "";
        break;
      case 1:
        tradBillions = Upto_one_thousand(billions) + " billion ";
        break;
      default:
        tradBillions = Upto_one_thousand(billions) + " billion ";
    }
    String result = tradBillions;

    String tradMillions;
    switch (millions) {
      case 0:
        tradMillions = "";
        break;
      case 1:
        tradMillions = Upto_one_thousand(millions) + " million ";
        break;
      default:
        tradMillions = Upto_one_thousand(millions) + " million ";
    }
    result = result + tradMillions;

    String tradHundredThousands;
    switch (hundredThousands) {
      case 0:
        tradHundredThousands = "";
        break;
      case 1:
        tradHundredThousands = "one thousand ";
        break;
      default:
        tradHundredThousands = Upto_one_thousand(hundredThousands) +
          " thousand ";
    }
    result = result + tradHundredThousands;

    String tradThousand;
    tradThousand = Upto_one_thousand(thousands);
    result = result + tradThousand;

    // remove extra spaces!
    return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");
  }

  public static void main(String[] args) {
    System.out.println(convert(4517));
  }
}
four thousand five hundred seventeen

英文单词整数的复杂度分析

时间复杂度

循环运行的时间是固定的,因此复杂度将是 O(1)。

辅助空间

辅助空间是 O(1) 因为不需要额外的空间。