Share Code đọc số thành chữ, số lớn bao nhiêu cũng cân tất

ừm, lấy cái tên nào cho nó hợp lỗ tai chứ “không_nghìn” nghe ko hiểu gì hết

3 Likes

Có code C++ không các bác?

1 Like

Bạn tự code lại chứ không xin code nhé.

2 Likes

It’s been a while since an interesting topic on dnh
lẽ ra hàm nhận vào int thì ngon hơn nhưng python nó lại đi xấp xỉ với số quá lớn, hợ hợ trước giờ cứ tưởng cái unlimited digits feature của python phải ngon hơn thế cơ
my python code:

def read_number(num = "", level = -1):
    if int(num) <= 0: return ""
    if len(num) > 3:
        to_read = int(num[-3:])
        remaining = num[0:-3]
    else:
        remaining = "0"
        to_read = int(num)
    res = read_number(remaining, level + 1)
    
   // đọc bình thường theo hàng trăm + explicit ở cuối (nghìn, triệu, tỉ)
    explicit = ""
    if level >= 0:
        explicit = level_name[level%3]
    if to_read <= 0: 
        if explicit == "tỉ ": return res + explicit
        return res

    second_name, third_name = "", ""
    second_explicit = ""
    unit = to_read % 10
    tenth = int((to_read%100)/10)
    hundredth = int(to_read/100)

    first = digit_name[hundredth] + "trăm " if int(remaining) + hundredth > 0 else ""
    if tenth == 0:
        if unit > 0 and first != "": 
            second_explicit = "lẻ "
    elif tenth == 1: second_name = "mười "
    else:
        second_name = digit_name[tenth]
        second_explicit = "mươi "
    if unit == 1 and tenth > 1: third_name = "mốt "
    elif unit != 0: third_name = digit_name[unit]
    return res + first + second_name + second_explicit + third_name + explicit

//Thêm hàm này để catch exception invalid syntax
def TransferToText(value = ""):
    try: 
        val = int(value)
        if val == 0: return digit_name[0]
        return read_number(value)
    except ValueError:
        return "Error: Invalid syntax"
1 Like

Mình có làm một bài về đọc số từ 0 -> 999. Không biết như thế này đã “clean code” chưa.

public class test {
	
	public static String motSo (int i) {
		String result = "";
			switch (i) {
			case 1:result = "mot";break;
			case 2:result = "hai";break;
			case 3:result = "ba";break;
			case 4:result = "bon";break;
			case 5:result = "nam";break;
			case 6:result = "sau";break;
			case 7:result = "bay";break;
			case 8:result = "tam";break;
			case 9:result = "chin";break;
			default:
				break;
			}
		return result;
	}
	public static String haiSo(int i) {
		String result = "";
			if(i>=10 && i <= 19 && i != 15) {
				result = "muoi"+motSo(i%10);
			}
			else if (i == 15)
				result = "muoilam";
			else if(i%10 == 5)
			{
				result = motSo(i/10) + "muoilam" ;
			}
			else {
				result = motSo(i/10) + "muoi" + motSo(i%10);
			}
		return result;
	}
	public static void main(String[] args)
	{
		int number = 342;
		String result = "";
		if(number == 0)
			result = "khong";
		else if(number>0 && number <=9) {
		result = motSo(number);
		}
		else if(number >= 10 && number <=99)
		{
			result = haiSo(number);
		}
		else if(number >=100 && number <=999)
		{
			if(number%100/10 == 0)
			{
				if(number%10 ==0)
					result = motSo(number/100)+"tram";
				else
				result = motSo(number/100) + "tramle"+motSo(number%10);
			}
			else {
				result = motSo(number/100)+"tram"+haiSo(number%100);
			}
		}
		System.out.print(result+"\n");
	}
}
1 Like

Bài này nghe hay nhỉ? tối về thử làm xem. Cơ mà số này tôi không biết đọc sao mới đúng. Ngày xưa đi học mẹ dặn, chỉ cần biết đếm tiền đến trăm tỉ thôi, lỡ số lớn hơn thì quy ra tiền đô, hoặc thuê thằng khác nó đếm hộ =))))))))))))))))))))))))))

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?