ເຊື່ອມໂຍງກັບ ຄຳ ສັບພາສາອັງກິດ


ລະດັບຄວາມຫຍຸ້ງຍາກ Hard
ຖາມເລື້ອຍໆໃນ Amazon ເຟສບຸກ Microsoft Oracle
string

ໃນບັນຫາ“ ຕົວເລກເຊື່ອມໂຍງກັບ ຄຳ ສັບພາສາອັງກິດ” ພວກເຮົາໄດ້ໃຫ້ຕົວເລກທີ່ບໍ່ແມ່ນລົບແລະ ໜ້າ ວຽກທີ່ຈະປ່ຽນຕົວເລກນັ້ນເຂົ້າໄປໃນ ຄຳ ສັບທີ່ເປັນຕົວເລກຂອງມັນຫຼືພວກເຮົາໄດ້ຮັບການປ້ອນຂໍ້ມູນຂອງເລກ, ຕົວເລກໃດ ໜຶ່ງ, ແລະວຽກງານຂອງພວກເຮົາແມ່ນເພື່ອສະແດງຕົວເລກນັ້ນໃນ string ແບບຟອມ. ຂໍໃຫ້ເບິ່ງຕົວຢ່າງ ໜຶ່ງ, ຕົວເລກ "765" ຄວນເປັນຕົວແທນໃຫ້ເປັນ "ເຈັດຮ້ອຍຫົກສິບຫ້າ". ດັ່ງນັ້ນພວກເຮົາຈະຈັດການກັບທຸກໆຕົວເລກສະເພາະໃນ ຈຳ ນວນ ໜຶ່ງ.

ຍົກຕົວຢ່າງ

ການປ້ອນຂໍ້ມູນ:

123

ຜົນໄດ້ຮັບ:

ໜຶ່ງ ຮ້ອຍຊາວສາມ

ການປ້ອນຂໍ້ມູນ:

4517

ຜົນໄດ້ຮັບ:

ສີ່ພັນຫ້າຮ້ອຍເຈັດສິບເຈັດ

ທ່ານຕ້ອງຂຽນໂປຼແກຼມເພື່ອປ່ຽນເລກໃດ ໜຶ່ງ ເຂົ້າໃນຮູບແບບ ຄຳ ສັບທີ່ເປັນຕົວເລກຂອງມັນ

ລະບົບວິເຄາະ

  1. ປະກາດຕົວປ່ຽນ Long Integer ແລະຮັບເອົາການປ້ອນຂໍ້ມູນເຂົ້າ.
  2. ປະກາດເປັນ array ສຳ ລັບສະຖານທີ່ ໜຶ່ງ ແລະເລີ່ມຕົ້ນທຸກໆ ຄຳ ທີ່ວາງ ຄຳ ໃນມັນ, ແລະອີກແຖວ ໜຶ່ງ ສຳ ລັບສິບສະຖານທີ່ແລະເລີ່ມຕົ້ນດ້ວຍຫລາຍສິບ ຄຳ ຂອງສະຖານທີ່ຕາມທີ່ຂຽນໄວ້ໃນລະຫັດ.
  3. ສົ່ງເງິນປັນຜົນຂອງ ຈຳ ນວນນັ້ນດ້ວຍສາຍທີ່ ເໝາະ ສົມກັບ ໜ້າ ທີ່ເຊິ່ງສາມາດຮັບເອົາ ຄຳ ທີ່ໄດ້ແລະສິບ ຄຳ ແລະເພີ່ມມັນໃສ່ສາຍຊົ່ວຄາວ.
  4. ສົ່ງຄືນສາຍບິດຊົ່ວຄາວນັ້ນ.
  5. ຫນ້າທີ່ສາມາດເຮັດວຽກໄດ້ໃນຫລາຍບ່ອນແລະຫລາຍສິບສະຖານທີ່ສາມາດໄດ້ຮັບ ຄຳ ສັບທີ່ ເໝາະ ສົມ ສຳ ລັບມັນຈາກແຖວແລະເກັບມັນໄວ້ໃນຜົນລັບ.
  6. ແລະມັນຈະຮັກສາສາຍຕໍ່ໄປຈົນກວ່າມັນມາຮອດສະຖານທີ່ ໜຶ່ງ ຂອງ ຈຳ ນວນ.
  7. ແລະພວກເຮົາເອົາຜົນໄດ້ຮັບຂອງຕົວເລກທີ່ເປັນຕົວແທນໃຫ້ເປັນຊ່ອຍແນ່.

ຄໍາອະທິບາຍ

ແນວຄວາມຄິດຫຼັກຂອງພວກເຮົາແມ່ນເລີ່ມຈາກມູນຄ່າສູງສຸດ. ດັ່ງນັ້ນຈຶ່ງປະກາດເປັນສອງແຖວໃນ ໜຶ່ງ ທີ່ເກັບຮັກສາທຸກ ຄຳ ທີ່ນ້ອຍກວ່າ 20. ແລະ ໜຶ່ງ ທີ່ເກັບຄ່າທັງ ໝົດ ໃນ ຈຳ ນວນຫລາຍສິບອັນຈະຖືກເກັບໄວ້ເຊິ່ງ ໜ້ອຍ ກວ່າ 100, ດັ່ງທີ່ຂຽນໄວ້ໃນລະຫັດ.

ດັ່ງນັ້ນພວກເຮົາຈະຜ່ານເລື່ອງນີ້ດ້ວຍຕົວຢ່າງ.

ການປ້ອນຂໍ້ມູນແມ່ນ 56543

ພວກເຮົາເອົາຂໍ້ມູນເຂົ້າແລະສົ່ງມັນໄປທີ່ getWords ໜ້າ ທີ່ຂອງພວກເຮົາບ່ອນທີ່ພວກເຮົາປະກາດຜົນສະຕິງແລະພວກເຮົາຈະຜ່ານເງິນປັນຜົນ. ສະນັ້ນກ່ອນອື່ນ ໝົດ ມັນຈະຜ່ານເຊິ່ງແບ່ງປັນຕົວເລກໃຫ້ 10000000 ແລະພວກເຮົາຈະໄດ້ເງິນປັນຜົນເປັນ 0. 0 ຜ່ານໄປດ້ວຍສາຍ crore. ມັນຈະເຂົ້າມາໃນ ໜ້າ ທີ່ ຄຳ ທີ່ມັນກວດເບິ່ງ 0th ສະຖານທີ່ທີ່ສິບແລະບ່ອນທີ່ມັນພົບວ່າບໍ່ມີຫຍັງເລີຍແລະຕອນນີ້ກັບຄືນມາດ້ວຍສາຍລົມເປົ່າ.

ດັ່ງນັ້ນດຽວນີ້, ມັນຈະຜ່ານເລກທີ່ແບ່ງຕົວເລກໃຫ້ 100000 ແລະໂມດູນກັບ 100 ແລະພວກເຮົາຈະໄດ້ເງິນປັນຜົນເປັນ 0. 0 ຜ່ານດ້ວຍເຊັກເງີນດຽວນີ້. ມັນຈະເຂົ້າມາໃນ ໜ້າ ທີ່ ຄຳ ທີ່ມັນກວດເບິ່ງ 0th ສະຖານທີ່ທີ່ສິບແລະບ່ອນທີ່ມັນຊອກຫາບໍ່ມີຫຍັງເລີຍແລະດຽວນີ້ກັບຄືນມາພ້ອມກັບສະຕິງເປົ່າ.

ດັ່ງນັ້ນດຽວນີ້, ມັນ ກຳ ລັງຈະຜ່ານເລກທີ່ແບ່ງເລກໂດຍ 1000 ແລະໂມດູນກັບ 100 ແລະພວກເຮົາຈະໄດ້ເງິນປັນຜົນເປັນ 0, 56 ຜ່ານດ້ວຍສາຍພັນສາຍດຽວນີ້. ມັນຈະເຂົ້າມາໃນ ໜ້າ ທີ່ ຄຳ ວ່າມັນໃຊ້ເວລາເງິນປັນຜົນເປັນ 5 ແລະເຫລືອ 6 ຄືກັບສາຍຜ່ານເປັນພັນ, ທັງ ໝົດ ນີ້ຈະຖືກເກັບໄວ້ເປັນສະຕິງຊົ່ວຄາວເຊິ່ງແມ່ນ "ຫ້າສິບຫົກພັນ" ແລະມັນຈະສົ່ງຜົນໃນຜົນໄດ້ຮັບ.

ດຽວນີ້, ມັນ ກຳ ລັງຈະຜ່ານເລກທີ່ຈະແບ່ງ ຈຳ ນວນໂດຍ 100 ແລະໂມດູນກັບ 10 ແລະພວກເຮົາຈະໄດ້ເງິນປັນຜົນເປັນ 5. 5 ຜ່ານໄປດ້ວຍເຊືອກຮ້ອຍດຽວນີ້. ມັນຈະເຂົ້າມາໃນ ໜ້າ ທີ່ ຄຳ ທີ່ມັນໃຊ້ເວລາເງິນປັນຜົນເປັນ 5. ແລະສ່ວນທີ່ເຫລືອເປັນ 0 ດ້ວຍສາຍທີ່ຖືກສົ່ງເປັນຮ້ອຍດັ່ງນັ້ນຫລັງຈາກຄົ້ນຫາໃນແຖວແລະເພີ່ມມັນເຂົ້າໃນແຖວຊົ່ວຄາວຈະກາຍເປັນ "ຫ້າສິບຫົກພັນຫ້າຮ້ອຍ".

ດຽວນີ້ຫລັງຈາກກວດເບິ່ງຖ້າຕັນ, ມັນຈະພິມ“ ແລະ” ແລະດຽວນີ້. ມັນ ກຳ ລັງຈະຜ່ານເລກທີ່ໂມດູນກັບ 100 ແລະຜ່ານໄປ 43. ແລະພວກເຮົາຈະໄດ້ເງິນປັນຜົນເປັນ 4 ແລະສ່ວນທີ່ເຫລືອຄື 3 ທີ່ເກັບໄວ້ໃນສາຍຊົ່ວຄາວ. ຫລັງຈາກໄດ້ຄົ້ນຫາ ຄຳ ສັບ ສຳ ລັບ ຈຳ ນວນແລະ temp ທີ່ໃຫ້ກັບຄືນມາເປັນຜົນ.

ແລະດຽວນີ້ຜົນຈະກາຍເປັນ“ ຫ້າສິບຫົກພັນຫ້າຮ້ອຍສີ່ສິບສາມ”.

ການປະຕິບັດ

ໂປຣແກຣມ C ++ ສຳ ລັບ Integer ກັບ ຄຳ ສັບພາສາອັງກິດ

#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

ການວິເຄາະຄວາມສັບສົນ ສຳ ລັບ ຄຳ ສັບພາສາອັງກິດແບບເຊື່ອມສານ

ຄວາມສັບສົນເວລາ

ວົງຈອນເຮັດວຽກເປັນໄລຍະເວລາຄົງທີ່ສະນັ້ນຄວາມສັບສົນຈະມີຂື້ນ ໂອ (1).

ອະວະກາດ

ພື້ນທີ່ຊ່ວຍແມ່ນ O (1) ຍ້ອນວ່າບໍ່ ຈຳ ເປັນຕ້ອງມີພື້ນທີ່ພິເສດ.