[Rust] 62进制10进制互相转换

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()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值