Rust 如何将锈号转换为英语单词,如1->“一”?
我的任务是将数字转换成文本,比如115->115。数字将介于0和18446744073709551615之间—64位无符号整数的最大值Rust 如何将锈号转换为英语单词,如1->“一”?,rust,Rust,我的任务是将数字转换成文本,比如115->115。数字将介于0和18446744073709551615之间—64位无符号整数的最大值 最后一个转换必须是18446744073709551615->十八个五分之四亿四千六百四十四万四千四百亿个四分之三亿七千九百万个五亿一千六百一十五个我碰巧手头有这个程序,因为它是计算机上的一个常见问题编码挑战网站。您必须将数字分解为3位数的组,然后调用函数递归地将数字序列化为文本。以下是完整的解决方案: use std::iter::successors; c
最后一个转换必须是18446744073709551615->十八个五分之四亿四千六百四十四万四千四百亿个四分之三亿七千九百万个五亿一千六百一十五个我碰巧手头有这个程序,因为它是计算机上的一个常见问题编码挑战网站。您必须将数字分解为3位数的组,然后调用函数递归地将数字序列化为文本。以下是完整的解决方案:
use std::iter::successors;
const ONES: [&str; 20] = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
"eleven",
"twelve",
"thirteen",
"fourteen",
"fifteen",
"sixteen",
"seventeen",
"eighteen",
"nineteen",
];
const TENS: [&str; 10] = [
"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
"seventy", "eighty", "ninety",
];
const ORDERS: [&str; 7] = [
"zero",
"thousand",
"million",
"billion",
"trillion",
"quadrillion",
"quintillion", // enough for u64::MAX
];
pub fn encode(num: u64) -> String {
match num {
0..=19 => ONES[num as usize].to_string(),
20..=99 => {
let upper = (num / 10) as usize;
match num % 10 {
0 => TENS[upper].to_string(),
lower => format!("{}-{}", TENS[upper], encode(lower)),
}
}
100..=999 => format_num(num, 100, "hundred"),
_ => {
let (div, order) =
successors(Some(1u64), |v| v.checked_mul(1000))
.zip(ORDERS.iter())
.find(|&(e, _)| e > num / 1000)
.unwrap();
format_num(num, div, order)
}
}
}
fn format_num(num: u64, div: u64, order: &str) -> String {
match (num / div, num % div) {
(upper, 0) => format!("{} {}", encode(upper), order),
(upper, lower) => {
format!("{} {} {}", encode(upper), order, encode(lower))
}
}
}
此站点的预期答案太大/太复杂。