Thứ Bảy, 4 tháng 5, 2024

3.9: Chuyển đổi giữa số và chữ

 


1. Từ số sang chữ: 111 > một một một.

2. Từ chữ sang số: một một một > 111.

3. Chuyển số thành cách đọc tiếng việt: 111 > Một trăm mười một ngàn lẻ một.


1.

import java.util.Scanner; public class NumberToWords { private static final String[] DON_VI = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" }; public static void main(String[] args) { while (true) { Scanner scanner = new Scanner(System.in); System.out.print("Nhập vào số: "); int number = scanner.nextInt(); System.out.println("Kết quả: " + convertNumberToWords(number)); } } public static String convertNumberToWords(int number) { if (number == 0) { return "không"; } StringBuilder words = new StringBuilder(); while (number > 0) { int digit = number % 10; words.insert(0, DON_VI[digit] + " "); number /= 10; } while (number < 0) { int digit = -(number % 10); words.insert(0, DON_VI[digit] + " "); number /= 10; if (number == 0) { words.insert(0, "âm" + " "); } } return words.toString().trim(); } }


2.

import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; public class NumberToWorlds { public static void main(String[] args) { Map<String, Integer> m = new HashMap<>(); m.put("không", 0); m.put("một", 1); m.put("hai", 2); m.put("ba", 3); m.put("bốn", 4); m.put("năm", 5); m.put("sáu", 6); m.put("bảy", 7); m.put("tám", 8); m.put("chín", 9); while (true) { boolean firstNumber = true; // Biến đánh dấu số đầu tiên boolean displayZero = false; // Biến đánh dấu xem có hiển thị số 0 không NumberToWorlds test = new NumberToWorlds(); String[] y = test.nhapvaotubanphim(); for (int i = 0; i < y.length; i++) { test.xuly(m, y[i], firstNumber, displayZero); // Truyền giá trị của biến đánh dấu vào phương thức xuly if (firstNumber && m.get(y[i]) == 0) { displayZero = false; // Nếu số đầu tiên là 0, không hiển thị số 0 } else { displayZero = true; // Ngược lại, hiển thị số 0 firstNumber = false; // Đánh dấu rằng số đã không còn là số đầu tiên nữa } } System.out.println(); // In ra dấu cách sau mỗi lần nhập } } public String[] nhapvaotubanphim() { Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào chữ số: "); String x = scanner.nextLine(); String[] m = x.split("\\s"); return m; } public void xuly(Map<String, Integer> m, String n, boolean firstNumber, boolean displayZero) { Set<String> keySet = m.keySet(); for (String key : keySet) { if (n.equals(key)) { if (displayZero || m.get(key) != 0) { // Hiển thị số khi biến displayZero là true hoặc giá trị của nó // khác 0 System.out.print(m.get(key) + " "); } } } } }

3.a.

package lk;


import java.util.ArrayList;

import java.util.Scanner;


class Demo {


static String[] one_digit = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };


static String[] units = { "", " mốt", " hai", " ba", " bốn", " lăm", " sáu", " bảy", " tám", " chín" };


static String[] tens = { "linh", "mười", "hai mươi", "ba mươi", "bốn mươi", "năm mươi", "sáu mươi", "bảy mươi",

"tám mươi", "chín mươi" };


static String[] hundreds = { "không trăm", "một trăm", "hai trăm", "ba trăm", "bốn trăm", "năm trăm", "sáu trăm",

"bảy trăm", "tám trăm", "chín trăm" };


static String[] bigger = { "", " nghìn", " triệu", " tỉ", " nghìn tỉ", " triệu tỉ", " tỉ tỉ" };


static String read_class(String s) {

int n = Integer.parseInt(s);


String _hundreds = hundreds[n / 100];

String _tens = tens[(n / 10) % 10];

String _units = units[n % 10];


if (s.length() == 1)

return one_digit[n];

else if (n == 11)

return tens[n / 10] + " một";

else if (s.length() == 2)

return tens[n / 10] + _units;

else {

if (n == 111)

return _hundreds + " " + _tens + " một";

if (s.equals("000"))

return "";

else if ((n / 10) % 10 == 0) { // kiểm tra hàng chục bằng 0 không

if (n % 10 == 0) // kiểm tra hàng đơn vị bằng 0 không

return _hundreds;

else // hàng chục = 0 hàng đơn vị khác 0

return _hundreds + " " + _tens + " " + one_digit[n % 10];

} else

return _hundreds + " " + _tens + _units;

}

}


public static String readNumber(String s) {


// Loại bỏ các số 0 đứng đầu

s = s.replaceFirst("^0+", "");


// Kiểm tra xem chuỗi đã bị loại bỏ hết số 0 trở nên rỗng hay không

if (s.isEmpty()) {

s = "0";

}

ArrayList<String> classes = new ArrayList<String>();

boolean isNegative = false;


if (s.startsWith("-")) {

isNegative = true;

s = s.substring(1); // Loại bỏ dấu trừ

// Loại bỏ các số 0 đứng đầu

s = s.replaceFirst("^0+", "");


// Kiểm tra xem chuỗi đã bị loại bỏ hết số 0 trở nên rỗng hay không

if (s.isEmpty()) {

s = "0";

}

}


String integerPart = s;

String decimalPart = "";

if (s.contains(".")) {

String[] parts = s.split("\\.");

integerPart = parts[0];

decimalPart = parts[1];

}


// xử phần nguyên

for (int i = integerPart.length() - 1; i > 1; i = i - 3)

classes.add(integerPart.substring(i - 2, i + 1));


if (integerPart.length() % 3 != 0)

classes.add(integerPart.substring(0, integerPart.length() % 3));


String res = "";


for (int i = 0; i < classes.size(); i++) {

String named_class = read_class(classes.get(i));

if (!named_class.equals(""))

res = named_class + bigger[i] + " " + res;

}


// xử phần thập phân

ArrayList<String> classes2 = new ArrayList<String>();

for (int i = decimalPart.length() - 1; i > 1; i = i - 3)

classes2.add(decimalPart.substring(i - 2, i + 1));


if (decimalPart.length() % 3 != 0)

classes2.add(decimalPart.substring(0, decimalPart.length() % 3));


String res2 = "";


for (int i = 0; i < classes2.size(); i++) {

String named_class2 = read_class(classes2.get(i));

if (!named_class2.equals(""))

res2 = named_class2 + bigger[i] + " " + res2;

}

//

if (isNegative) {

res = "âm " + res; // Thêm từ "âm" nếu số âm

}


if (!decimalPart.isEmpty()) {

res = res.trim() + " phẩy "+res2;

}


return res.trim();

}


public static void main(String args[]) {

while (true) {

Scanner scanner = new Scanner(System.in);

System.out.print("Nhập vào số: ");

String s = scanner.nextLine();

System.out.println(readNumber(s));

}

}

}

3.b.


import java.util.Scanner; public class NumberToVietnamese { private static String readGroup(String group) { String[] readDigit = {" Không", " Một", " Hai", " Ba", " Bốn", " Năm", " Sáu", " Bảy", " Tám", " Chín" }; String temp = ""; if (group.equals("000")) return ""; // Read number hundreds temp = readDigit[Integer.parseInt(group.substring(0, 1))] + " Trăm"; // Read number tens if (group.substring(1, 2).equals("0")) { if (!group.substring(2, 3).equals("0")) { temp += " Lẻ" + readDigit[Integer.parseInt(group.substring(2, 3))]; return temp; } } else { temp += readDigit[Integer.parseInt(group.substring(1, 2))] + " Mươi"; } // Read number if (group.substring(2, 3).equals("5")) { temp += " Lăm"; } else if (!group.substring(2, 3).equals("0")) { temp += readDigit[Integer.parseInt(group.substring(2, 3))]; } return temp; } public static String readMoney(String num) { if (num == null || num.equals("")) return ""; String temp = ""; // Length <= 18 while (num.length() < 18) { num = "0" + num; } String g1 = num.substring(0, 3); String g2 = num.substring(3, 6); String g3 = num.substring(6, 9); String g4 = num.substring(9, 12); String g5 = num.substring(12, 15); String g6 = num.substring(15, 18); // Read group 1 if (!g1.equals("000")) { temp = readGroup(g1); temp += " Triệu"; } // Read group 2 if (!g2.equals("000")) { temp += readGroup(g2); temp += " Nghìn"; } // Read group 3 if (!g3.equals("000")) { temp += readGroup(g3); temp += " Tỷ"; } else if (!"".equals(temp)) { temp += " Tỷ"; } // Read group 4 if (!g4.equals("000")) { temp += readGroup(g4); temp += " Triệu"; } // Read group 5 if (!g5.equals("000")) { temp += readGroup(g5); temp += " Nghìn"; } // Read group 6 temp += readGroup(g6); // Refine temp = temp.replaceAll("Một Mươi", "Mười"); temp = temp.trim(); temp = temp.replaceAll("Không Trăm", ""); temp = temp.trim(); temp = temp.replaceAll("Mười Không", "Mười"); temp = temp.trim(); temp = temp.replaceAll("Mươi Không", "Mươi"); temp = temp.trim(); if (temp.indexOf("Lẻ") == 0) temp = temp.substring(2); temp = temp.trim(); temp = temp.replaceAll("Mươi Một", "Mươi Mốt"); temp = temp.trim(); // Change case return temp.substring(0, 1).toUpperCase() + temp.substring(1).toLowerCase() + " đồng"; } public static void main(String[] args) { while (true) { Scanner scanner = new Scanner(System.in); System.out.print("Nhập vào số: "); String s = scanner.nextLine(); System.out.println(readMoney(s)); } } }

3.c.


 public static String transformNumber(String number) {
    // test number = "1234567890";
    if (number == null || number.trim().length() == 0)
      return "";
    int t, l = number.length();
    t = l - 1;
    String[] dv = new String[] { "nghin", "trieu", "ty", "nghi ty", "trieu ty" };
    String[] tl = new String[] { "muoi", "tram" };
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < l; i++) {
      buffer.append(number.charAt(i)).append(" ");
      int k = (t - 1) / 3;
      if (k >= 0 && t > 0) {
        if (t % 3 == 0)
          buffer.append(dv[k]).append(" ");
        else
          buffer.append(tl[(t % 3) - 1]).append(" ");
        --t;
      }
    }
    number = buffer.toString(); 
    // truong hop dc biet
    number = number.replaceAll("muoi 0", "muoi").replaceAll("1 muoi 5", "muoi lam").replaceAll("1 muoi", "muoi").replaceAll("0 muoi", "le");
    // thay so
    number = number.replaceAll("1", "mot").replaceAll("2", "hai").replaceAll("3", "ba").replaceAll("4", "bon").replaceAll("5", "nam").replaceAll("6", "sau").replaceAll("7", "bay").replaceAll("8", "tam").replaceAll("9", "chin").replaceAll("0", "khong");
    System.out.println("\n\n " + number + "\n\n");
    return number;
  }

Không có nhận xét nào:

Đăng nhận xét