fn number_to_letters(n: u32) -> String { if n == 0 { return "zero".to_string(); } let ones = [ "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", ]; let teens = [ "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", ]; let tens = [ "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", ]; let mut result = String::new(); let mut num = n; // 处理千位 if num >= 1000 { let thousands = num / 1000; result.push_str(&number_to_letters_under_1000( thousands, &ones, &teens, &tens, )); result.push_str("thousand"); num %= 1000; if num > 0 { result.push_str("and"); } } // 处理百位以下 if num > 0 { result.push_str(&number_to_letters_under_1000(num, &ones, &teens, &tens)); } result } fn number_to_letters_under_1000(n: u32, ones: &[&str], teens: &[&str], tens: &[&str]) -> String { let mut result = String::new(); let mut num = n; // 处理百位 if num >= 100 { let hundreds = num / 100; result.push_str(ones[hundreds as usize]); result.push_str("hundred"); num %= 100; if num > 0 { result.push_str("and"); } } // 处理十位和个位 if num >= 20 { let ten_digit = num / 10; result.push_str(tens[ten_digit as usize]); num %= 10; if num > 0 { result.push_str(ones[num as usize]); } } else if num >= 10 { result.push_str(teens[(num - 10) as usize]); } else if num > 0 { result.push_str(ones[num as usize]); } result } fn count_letters(text: &str) -> usize { text.chars().filter(|c| c.is_alphabetic()).count() } fn solve_letter_count(start: u32, end: u32) -> usize { (start..=end) .map(|n| count_letters(&number_to_letters(n))) .sum() } fn main() { // 验证 1-5 的例子 let test_words = ["one", "two", "three", "four", "five"]; let test_count: usize = test_words.iter().map(|w| w.len()).sum(); println!("1到5的字母数: {test_count}"); // 验证我们的函数 let our_count = solve_letter_count(1, 5); println!("我们函数计算的1到5: {our_count}"); // 计算 1 到 1000 let result = solve_letter_count(1, 1000); println!("1到1000的字母总数: {result}"); }