Quảng cáo
1 câu trả lời 298
Viết bằng ngôn ngữ C#:
// code đọc số thành chữ
#define MXLEN 64
// hàm nhận số và ghi cách đọc vào chuỗi ds
char *DocSo(char *ds, int so)
{
char *kh [] = { "", "ngàn", "triệu", "tỷ" }; // các khoản 3 chữ số
if (so == 0)
return Doc3So(ds, so, 0);
char d3s[MXLEN]; // chuỗi để đọc 3 chữ số
int kilo = 0; // hàng ngàn
while (so > 0)
{
Doc3So(d3s, so % 1000, so / 1000);
if (strlen(ds) == 0)
strcpy(ds, (strcmp(d3s,"không")) ? d3s : "chẵn");
else if (strcmp(d3s,"không") || strcmp(ds,"chẵn"))
strcpy(ds, strcat(strcat(strcat(strcat(d3s, " "), kh[kilo]), " "), ds));
// tức là ds = d3s + " " + kh[kilo] + " " + ds;
kilo++;
so /= 1000;
}
return ds;
}
char *Doc3So(char *ds, int so, int truoc) // truoc: số có phần đi trước nó hay không
{
char *doc[] = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
if (so == 0)
{
strcpy(ds, doc[0]);
return ds;
}
int donvi = so % 10;
int chuc = (so / 10) % 10;
int tram = (so / 100) % 10;
if (truoc != 0 || tram != 0)
{
strcat(strcpy(ds, doc[so / 100]), " trăm");
// tức là ds = doc[so / 100] + " trăm";
if (chuc == 0 && donvi != 0) strcat(ds, " lẻ");
}
if (chuc == 1) strcat(ds, " mười");
else if (chuc > 1) strcat(strcat(strcat(ds, " "), doc[chuc]), " mươi");
// tức là x += " " + doc[chuc] + " mươi";
if (chuc != 0 && donvi == 5) strcat(ds, " lăm");
else if (donvi != 0) strcat(strcat(ds, " "), doc[donvi]);
return ds;
}
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
149303 -
Đã trả lời bởi chuyên gia
99719 -
Đã trả lời bởi chuyên gia
97338 -
Đã trả lời bởi chuyên gia
80007 -
Đã trả lời bởi chuyên gia
72853 -
Đã trả lời bởi chuyên gia
55936 -
Đã trả lời bởi chuyên gia
55307
