Xin hỏi bạn nào có thể chỉ mình giải thuật để chuyển số thành chữ (tiếng Anh hoặc Việt) có thể chạy được trên số lớn hơn 10 chữ số.
VD: 134 ->one hundred and thirty four.
Cảm ơn nhiều nhe:)
Bạn lập trình trên ngôn ngữ nào dzậy? Có thể cho anh em biết được không? Nếu biết thì có thể dễ giúp bạn được hơn.
Ngôn ngữ lập trình nào không quan trọng, mình chỉ cần biết thuật giải thế nào thôi. :)
Java code
String[] millionsName = {
"",
" thousand",
" million",
" billion",
" trillion",
" quadrillion",
" quintillion"
};
String[] tensNames = {
"",
" ten",
" twenty",
" thirty",
" fourty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
};
String[] numNames = {
"",
" one",
" two",
" three",
" four",
" five",
" six",
" seven",
" eight",
" nine",
" ten",
" eleven",
" twelve",
" thirteen",
" fourteen",
" fifteen",
" sixteen",
" seventeen",
" eighteen",
" nineteen"
};
String convertLessThanOneThousand(int number) {
String soFar;
if (number % 100 < 20){
soFar = numNames[number % 100];
number /= 100;
}
else {
soFar = numNames[number % 10];
number /= 10;
soFar = tensNames[number % 10] + soFar;
number /= 10;
}
if (number == 0) return soFar;
return numNames[number] + " hundred" + soFar;
}
String convert(int number) {
/* special case */
if (number == 0) { return "zero"; }
String prefix = "";
if (number < 0) {
number = -number;
prefix = "negative";
}
String soFar = "";
int place = 0;
do {
int n = number % 1000;
if (n != 0){
String s = convertLessThanOneThousand(n);
soFar = s + majorNames[place] + soFar;
}
place++;
number /= 1000;
} while (number > 0);
return (prefix + soFar).trim();
}
Hope this help
Cảm ơn nhiều nhe jammy. Bài của bạn rất dễ hiểu và đơn giản. :)
Có điều mảng majorNames[] là mảng chứa cái gì? Theo mình nghĩ thì bạn đánh lộn tên mảng millionsName thành majorNames rồi.
Sorry nha. đánh lộn tên đó đổi millionName thành majorNames là ok.
Giải thuật thì mình có một bài viết khá chi tiết tại đây: http://kakalia.co.cc/2010/03/giai-thuat-doi-tu-so-sang-chu-tieng-viet/
Tuy nhiên, với các con số cực lớn, bạn có thể dùng nó như là một string, và thực hiện cắt chuỗi (tức phép chia cho 10 sẽ là cắt 1 chữ số, còn phép chia cho 1000 sẽ tương đương với cắt 3 chữ số), sau đó convert chữ số dạng string đó thành số nguyên và thực hiện các bước tiếp theo...
Chúc bạn thành công.
dauhalan88
19-08-2011, 10:58
bạn ơi có thuật toán nào mà ngắn hơn dễ hơn được không
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.