Cho chuỗi số, chuyển đổi thành đọc bằng chữ. Ví dụ: "361" → "Ba trăm sáu mươi mốt".
Chương trình hỗ trợ số từ 0 đến 9999 (tối đa 4 chữ số).
Ví dụ
Input: "1234" → Output: "một nghìn hai trăm ba mươi tư" Input: "7777" → Output: "bảy nghìn bảy trăm bảy mươi bảy"
Phương pháp:
- Nhập chuỗi số.
- Dùng mảng chứa từ cho hàng đơn vị, chục (10-19), chục tròn (20,30...), hàng trăm/nghìn.
- Xử lý theo độ dài chuỗi: nghìn, trăm, chục, đơn vị.
Mã nguồn C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void convert(char *num) {
int len = strlen(num);
if (len == 0) { fprintf(stderr, "Chuỗi rỗng\n"); return; }
if (len > 4) { fprintf(stderr, "Chỉ hỗ trợ đến 4 chữ số\n"); return; }
char *single[] = {"không","một","hai","ba","bốn","năm","sáu","bảy","tám","chín"};
char *teens[] = {"","mười","mười một","mười hai","mười ba","mười tư","mười lăm","mười sáu","mười bảy","mười tám","mười chín"};
char *tens[] = {"","","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"};
char *powers[] = {"trăm","nghìn"};
printf("\n%s: ", num);
if (len == 1) { printf("%s\n", single[*num - '0']); return; }
while (*num != '\0') {
if (len >= 3) {
if (*num - '0' != 0) {
printf("%s %s ", single[*num - '0'], powers[len-3]);
}
len--; num++;
} else {
if (*num == '1') {
int sum = *num - '0' + *(num+1) - '0';
printf("%s\n", teens[sum]);
return;
} else if (*num == '2' && *(num+1) == '0') {
printf("hai mươi\n"); return;
} else {
int i = *num - '0';
printf("%s ", i ? tens[i] : "");
num++;
if (*num != '0') printf("%s ", single[*num - '0']);
}
}
}
}
int main() {
convert("9132");
return 0;
}
Kết quả
chín nghìn một trăm ba mươi hai