您的位置:首页 > 其它

Problem 17 - How many letters would be needed to write all the numbers in words from 1 to 1000?

2008-07-17 22:12 579 查看
If the numbers 1 to 5 are written out in words: one, two, three,
four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
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();
}


Then, the result for this problem is out naturally. u can consult the logic in above code.

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐