题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
use std::io::{self, *}; fn main() { let mut buf=String::new(); io::stdin().read_line(&mut buf).unwrap(); //输入的ip地址 let ip=buf.trim().to_string(); buf.clear(); io::stdin().read_line(&mut buf).unwrap(); //输入的整数 let num=buf.trim().parse::<u32>().unwrap(); let ip2num=ip2num(ip); let num2ip=num2ip(num); print!("{}\n{}",ip2num,num2ip); } fn ip2num(ip:String)->u32{ let ip:Vec<&str>=ip.split(".").collect(); let mut binary_str=String::new(); for val in &ip{ let num=val.parse::<u8>().unwrap(); let binary=format!("{:#010b}",num); binary_str.push_str(&binary[2..]) } let mut result1=0; for (idx,val) in binary_str.chars().rev().enumerate(){ let base=val.to_digit(10).unwrap(); result1+=base*2_u32.pow(idx as u32); } result1 } fn num2ip(num:u32)->String{ let t=format!("{:#034b}",num); let binary_num=&t[2..]; let mut vec:Vec<&str>=vec![]; let mut i=0; while i<32{ vec.push(&binary_num[i..i+8]); i+=8; } let mut result2=String::new(); for val in vec{ let mut digit=0; for (idx,c) in val.chars().rev().enumerate(){ let base=c.to_digit(10).unwrap(); digit+=base*2_u32.pow(idx as u32); } result2.push_str(&digit.to_string()); result2.push_str("."); } result2.pop(); result2 }