楼主: 
yam276 ('_')   
2024-08-07 14:23:43※ 引述《enmeitiryous (enmeitiryous)》之铭言:
: 273. Integer to English Words
: 题目:
: 给你一个2^32-1到0之间的一个整数,把他转换成英文描述法,例如123->One Hundred
:  Twenty Three,以及101->One Hundred One,不是口语会说的One hundred and One
一半看答案跟思路解的
因为英文很机掰
所以要分成 <20 20~99 100~999 这些区间
Code:
impl Solution {
    pub fn number_to_words(num: i32) -> String {
        if num == 0 {
            return "Zero".to_string();
        }
        let below_20 = vec![
            "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"
            , "Nine", "Ten",
            "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen",
            "Seventeen", "Eighteen", "Nineteen"
        ];
        let tens = vec![
            "", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty",
            "Seventy", "Eighty", "Ninety"
        ];
        let thousands = vec![
            "", "Thousand", "Million", "Billion"
        ];
        fn helper(num: i32, below_20: &Vec<&str>, tens: &Vec<&str>) -> String
        {
            if num == 0 {
                return "".to_string();
            } else if num < 20 {
                return below_20[num as usize].to_string() + " ";
            } else if num < 100 {
                return tens[(num / 10) as usize].to_string() + " " + &helper(
                num % 10, below_20, tens);
            } else {
                return below_20[(num / 100) as usize].to_string() + " Hundred
                " + &helper(num % 100, below_20, tens);
            }
        }
        let mut num = num;
        let mut result = String::new();
        let mut i = 0;
        while num > 0 {
            if num % 1000 != 0 {
                result = helper(num % 1000, &below_20, &tens) + thousands[i] +
                " " + &result;
            }
            num /= 1000;
            i += 1;
        }
        result.trim().to_string()
    }
}