عدد صحیح کلمات انگلیسی


سطح دشواری سخت
اغلب در آمازون فیس بوک مایکروسافت وحی
رشته

در مسئله "Integer to English words" ما به یک عدد صحیح غیر منفی و وظایف داده شده که آن عدد صحیح را به کلمات عددی آن تبدیل کنیم یا ورودی یک عدد ، هر عدد را بدست آوریم و وظیفه ما نمایش آن عدد در یک رشته فرم. بیایید یک مثال را ببینیم ، عدد "765" باید "هفتصد و شصت و پنج" نشان داده شود. بنابراین می توانیم با هر تعداد مشخصی در یک عدد کنار بیاییم.

مثال

ورودی:

123

خروجی:

صدو بیست و سه

ورودی:

4517

خروجی:

چهار هزار و پانصد هفده

شما باید یک برنامه بنویسید تا هر عدد صحیح را به شکل کلمه عددی تبدیل کند

الگوریتم

  1. متغیر Long Integer را اعلام کرده و ورودی را بدست آورید.
  2. اعلام کنید صف برای یک مکان و مقداردهی اولیه کلمات کلمات را در آن قرار دهید ، و یک آرایه دیگر برای ده ها مکان و با ده ها مکان کلمات را به صورت کد شده تنظیم کنید.
  3. سود سهام آن عدد را با یک رشته مناسب به تابعی منتقل کنید که می تواند کلمات یک و دهگانه را بدست آورد و آن را به یک رشته موقت اضافه کند.
  4. آن رشته موقت را برگردانید.
  5. این تابع می تواند روی یک ها کار کند و ده ها مکان می توانند کلمات مناسب را از یک آرایه دریافت کرده و آن را در نتیجه رشته ذخیره کنند.
  6. و این رشته را تا زمانی که به شماره شخص برسد ادامه می دهد.
  7. و خروجی عددی را بدست می آوریم که نشان دهنده یک رشته است.

توضیح

ایده اصلی ما شروع از حداکثر مقدار است. بنابراین دو آرایه اعلام کرد که در آن همه کلمات کمتر از 20 را ذخیره می کند و دیگری که تمام مقادیر ذخیره شده در آن ضربات ده تا کمتر از 100 را ذخیره می کند ، همانطور که در کد نوشته شده است.

بنابراین ما با یک مثال این مورد را مرور خواهیم کرد.

ورودی 56543 داده می شود

ورودی را می گیریم و آن را به عملکرد خود getWords منتقل می کنیم ، جایی که نتیجه رشته را اعلام می کنیم و می خواهیم سود سهام را منتقل کنیم. بنابراین ابتدا تصویب می شود که عدد را بر 10000000 تقسیم می کند و ما سود 0. 0 عبور با رشته کرور را دریافت می کنیم. در عملکرد Words جایی که 0 را بررسی می کند وارد می شودth مکان ده ها و یک جایی که چیزی پیدا نمی کند و اکنون با یک رشته دما خالی برمی گردد.

بنابراین اکنون ، می خواهد عددی را که عدد را بر 100000 و مدولار را با 100 تقسیم می کند ، تصویب کند و ما به عنوان 0 تقسیم می کنیم. این در عملکرد Words قرار می گیرد که 0 را بررسی می کندth جای دهها و یک چیز دیگری پیدا نمی کند و اکنون با یک رشته دما خالی برگردید.

بنابراین اکنون ، می خواهد عددی را تصویب کند که عدد را بر 1000 و مدول را با 100 تقسیم می کند و ما تقسیم می کنیم 0 ، 56 پاس با رشته هزار در حال حاضر. این در تابع Words وجود خواهد داشت که سود را 5 می گیرد و 6 را می ماند و رشته را هزار می گذارد ، اینها در رشته موقت که "پنجاه و شش هزار" است ذخیره می شوند و در نتیجه بر می گردند.

حال ، می خواهد عددی را تقسیم کند که عدد را بر 100 و مدول را با 10 تقسیم می کند و ما سود را به عنوان 5 دریافت می کنیم. اکنون 5 رد می شود با رشته صد. این در تابع Words جایی خواهد بود که سود را به عنوان 5 می گیرد. و باقیمانده های 0 به عنوان رشته ای که صد می گذرد پس از جستجو در آرایه و افزودن آن به رشته موقت "پنجاه و شش هزار و پانصد" می شود.

اکنون پس از بررسی بلوک ، "و" و دوباره چاپ می شود. قرار است عددی که به صورت مدولار با 100 و عبور از 43 را عبور دهد. و ما سود را 4 و بقیه را 3 می گیریم که در رشته موقت ذخیره می شود. پس از پیدا کردن کلمات برای یک عدد داده شده و دما به نتیجه می رسد.

و اکنون نتیجه "پنجاه و شش هزار و پانصد و چهل و سه" می شود.

پیاده سازی

برنامه C ++ برای کلمات Integer to English

#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

برنامه جاوا برای کلمات Integer to English

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) زیرا فضای اضافی مورد نیاز نیست.