当前位置: 首页 > news >正文

淘宝客做网站怎么做搜外友链平台

淘宝客做网站怎么做,搜外友链平台,阿里巴巴网站做销售方案,长沙优化网站厂家2、进展转换 将十进制数转换为二进制表示形式的最简单方法是“除二法”&#xff0c;可用栈来跟踪二进制结果。 除二法 下面实现一个将十进制数转换为二进制或十六进制的算法&#xff0c;代码如下&#xff1a; #[derive(Debug)] struct Stack<T> {size: usize, // 栈大…
2、进展转换

将十进制数转换为二进制表示形式的最简单方法是“除二法”,可用栈来跟踪二进制结果。

在这里插入图片描述

除二法

下面实现一个将十进制数转换为二进制或十六进制的算法,代码如下:

#[derive(Debug)]
struct Stack<T> {size: usize,  // 栈大小data: Vec<T>, // 栈数据
}impl<T> Stack<T> {// 初始化空栈fn new() -> Self {Self {size: 0,data: Vec::new(), // 以 Vec 为低层}}fn is_empty(&self) -> bool {0 == self.size}fn len(&self) -> usize {self.size}// 清空栈fn clear(&mut self) {self.size = 0;self.data.clear();}// 将数据保存在 Vec 的末尾fn push(&mut self, val: T) {self.data.push(val);self.size += 1;}// 将栈顶减 1 后,弹出数据fn pop(&mut self) -> Option<T> {if 0 == self.size {return None;};self.size -= 1;self.data.pop()}// 返回栈顶数据引用和可变引用fn peek(&self) -> Option<&T> {if 0 == self.size {return None;}self.data.get(self.size - 1)}fn peek_mut(&mut self) -> Option<&mut T> {if 0 == self.size {return None;}self.data.get_mut(self.size - 1)}// 以下是为栈实现的迭代功能// into_iter: 栈改变,成为迭代器// iter: 栈不变,得到不可变迭代器// iter_mut:栈不变,得到可变迭代器fn into_iter(self) -> IntoIter<T> {// into_iter()方法获取了一个迭代器,然后进行迭代IntoIter(self)}fn iter(&self) -> Iter<T> {let mut iterator = Iter { stack: Vec::new() };for item in self.data.iter() {iterator.stack.push(item);}iterator}fn iter_mut(&mut self) -> IterMut<T> {let mut iterator = IterMut { stack: Vec::new() };for item in self.data.iter_mut() {iterator.stack.push(item);}iterator}
}
// 实现三种迭代功能
struct IntoIter<T>(Stack<T>);
// Iterator 是 Rust 的迭代器 迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。
impl<T: Clone> Iterator for IntoIter<T> {// into_iter()方法获取了一个迭代器,然后进行迭代。type Item = T;fn next(&mut self) -> Option<Self::Item> {// 迭代器之所以成为迭代器,是因为实现了Iterator trait。要实现该特征,最主要的就是实现其中的 next 方法,该方法控制如何从集合中取值,最终返回值的类型是关联类型 Item。if !self.0.is_empty() {self.0.size -= 1;self.0.data.pop()} else {None}}
}
// 'a 生命周期标识 用于帮助编译器检查引用的有效性,避免悬垂引用和使用已被释放的内存。
// 从所有权的角度来理解,就是它可以避免因为Copy或者clone的造成的不必要开销
struct Iter<'a, T: 'a> {stack: Vec<&'a T>, // 'a 被用在了传参类型 T 上
}
impl<'a, T> Iterator for Iter<'a, T> {type Item = &'a T; // 生命周期标识只作用于引用上,且放在&符号之后 如这里的 &'a Tfn next(&mut self) -> Option<Self::Item> {self.stack.pop()}
}struct IterMut<'a, T: 'a> {stack: Vec<&'a mut T>,
}
impl<'a, T> Iterator for IterMut<'a, T> {type Item = &'a mut T;fn next(&mut self) -> Option<Self::Item> {self.stack.pop()}
}
fn main() {let num1 = 10;let num2 = 43;let bin_str = base_converter(num1, 2);let hex_str = base_converter(num2, 16);println!("{num1}(十进制) = {bin_str}(二进制), {num2}(十进制) = {hex_str}(十六进制)");
}// 支持将 10进制数 转为 2 进制或 16 进制
fn base_converter(mut dec_num:u32,base:u32) -> String {// digits 对应各种余数的字符形式,尤其是 10-15let digits = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];let mut rem_stack = Stack::new();// 余数入栈while dec_num > 0 {let rem = dec_num % base;rem_stack.push(rem);dec_num /= base;}// 余数出栈并取对应字符以拼接成字符串let mut base_str = "".to_string();while !rem_stack.is_empty() {let rem = rem_stack.pop().unwrap() as usize;base_str += &digits[rem].to_string();}base_str
}

运行结果:

在这里插入图片描述

http://www.khdw.cn/news/66180.html

相关文章:

  • 网站上360 旋转的图是怎么做的网络营销具有什么特点
  • 阿里云 做购物网站网站佛山网站建设公司
  • 建设集团公司网站微信营销模式有哪些
  • 美业网站建设seo推广软
  • 大连做公司网站的公司seo快排技术教程
  • 网站提升排名域名搜索引擎
  • 网站建设开发能力很强的企业新媒体运营培训课程
  • 如何做网站seo优化排名优化怎么做
  • 营销网站建设套餐手机百度官网
  • wordpress博客不分页网站优化塔山双喜
  • 最新赚钱项目发布平台站长之家seo工具
  • 杭州专业做网站的公司哪家好公众号运营收费价格表
  • 自己做装修效果的网站北京本地网络推广平台
  • 知名商城网站建设公司百度指数网
  • 淘宝联盟的购物网站怎么做给企业做网站的公司
  • 网站的分页做不好会影响主页扬州seo博客
  • ASPnet动态网站开发教程试卷怎样推广自己的网站
  • 企业品牌营销型网站建设抖音优化公司
  • 可以做高清思维导图的网站西安百度提升优化
  • 做网站如何推广买量保定网站seo
  • 包头 网站制作百度网页版主页
  • 网站做百度推广企业网络营销方案策划
  • 营销公司官网谷歌搜索引擎优化seo
  • 做跨境的网站百度知道提问
  • 仿新浪微博网站代码免费关键词排名优化
  • 绵阳网站排名旺道seo系统
  • 海淀做网站的网络公司ks数据分析神器
  • 网站服务器做下载链接餐饮营销案例100例
  • 扶沟县建设局网站百度搜索榜
  • 企业网站的规划与建设cps广告联盟平台