If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.
First, I just want to write out the numbers in words as following.
// some numbers converted to letters is only one word.
static String[] single = { "zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen" };
// the tens place
static String[] tensPlace = { "", "", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety" };
static String hun = " hundred";
static String thou = "one thousand";
public static String num2Eng(int num) {
StringBuffer sb = new StringBuffer();
// if num equals 1000, return one thousand
if (num == 1000) {
return thou;
}
if (num / 100 > 0) {
// if the number is larger than 100, the words should
// start with *** hundred
sb.append(single[num / 100] + hun);
// if the last two digits is larger than 0, the
if (num % 100 > 0) {
// the words would be appended "and"
sb.append(" and ");
}
}
// if the last two digits is larger than 20
if (num % 100 >= 20) {
// the word should be appended tens place, twenty,
// thirty, forty and so on.
sb.append(tensPlace[num / 10 % 10]);
// if the last digit is lager than 0
if (num % 10 > 0) {
// the word should be appended the word
sb.append(" " + single[num % 10]);
}
} else if (num % 100 > 0) {// if the last two digits is
// between 10 and 20,they are
// single word.
sb.append(single[num % 100]);
}
return sb.toString();
}
private static int[] singleWord = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6,
6, 8, 8, 7, 7, 9, 8, 8 };
private static int[] tensPlaceWord = { 0, 0, 6, 6, 5, 5, 5, 7, 6, 6 };
private static int hunWord = 7;
private static int thouWord = 11;
public static int countLetters(int num) {
int count = 0;
if (num == 1000) {
return thouWord;
}
if (num / 100 > 0) {
count += singleWord[num / 100] + hunWord;
if (num % 100 > 0) {
count += 3;
}
}
if (num % 100 >= 20) {
// sb.append(tensPlace[num / 10 % 10]);
count += tensPlaceWord[num / 10 % 10];
if (num % 10 > 0) {
// sb.append(" " + single[num % 10]);
count += singleWord[num % 10];
}
} else if (num % 100 > 0) {
// sb.append(single[num % 100]);
count += singleWord[num % 100];
}
return count;
}发表于 @ 2008年07月17日 22:12:00 | 评论( loading... ) | 举报| 收藏