62进制10进制互相转换
基本思路:
使用HashMap存储数字和62进制字符的对应关系,进行计算。
程序说明:edition = "2018"
样例:
Compiling pe v0.1.0 (E:\code\pe)
Finished dev [unoptimized + debuginfo] target(s) in 1.19s
Running `target\debug\pe.exe`
1234
[src\main.rs:14] num2str(input_num(), map1) = "jU"
jU
[src\main.rs:15] str2num(input_str(), map2) = 1234
终端将被任务重用,按任意键关闭。
代码:/pe/src/main.rs
use std::collections::HashMap;
fn main() {
let all = vec!['0', '1', '2', '3', '4', '5', '6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
let mut map1= HashMap::new();
let mut map2 = HashMap::new();
for i in 0..62 {
map1.insert(i,all[i]);
map2.insert(all[i],i);
}
// dbg!(all.len());
// dbg!(map1.get(&0));
// dbg!(map2.get(&'k').unwrap());
dbg!(num2str(input_num(),map1));
dbg!(str2num(input_str(),map2));
// dbg!(num2str(str2num(input_str(),map2),map1));
}
fn input_str() -> String {
// 最多6位 max 6 char
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Error input");
input.trim().to_string()
}
fn input_num() -> usize {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Error num2str");
input.trim().parse::<usize>().unwrap()
}
fn str2num(input:String,map2:HashMap<char,usize>)->usize {
let mut sum = 0;
let mut len = input.len();
for i in input.chars() {
len -=1;
sum += map2.get(&i).unwrap()*((62 as i32).pow(len as u32)as usize);
// dbg!(len,sum);
}
sum
}
fn num2str(input:usize,map1:HashMap<usize,char>) -> String {
let mut vec:Vec<char> = Vec::new();
let mut input = input;
loop {
// dbg!(input);
vec.push(*map1.get(&(input%62)).unwrap());
if input < 62 { break }
input =input / 62;
}
vec.reverse();
vec.into_iter().collect()
}