基础算法(五)(进制转换)

1.进制的本质

对于一个十进制数字,比如说153,其本质是每一个数位上的数字乘上这一位上的权重,即:
153=(1×10^2)+(5×10^1)+(3×10^0)
而二进制,只不过是把10换成了2,任意一个非负整数都有唯一的一个二进制表示:
(153)10=(10011001)2


2.将k进制的数转换为10进制的数

假设给了一个数组来表示k进制的数组

代码模版如下:

ll x=0;
for(int i=0;i<=n;++i){x=x*k+a[i];
}
cout<<x<<'\n';

越高的数越优先乘k,当遍历到最后一位时直接就加上a[n]就好了 而之前遍历加上的数每次都会在指数位置加1,巧妙地实现了k进制转10进制的问题

###k进制的数可以通过对输入的字符串得到


3.将10进制转换为任意进制

我们可以先假设一个x的k进制表达式,再逐步地去求解
十进制数x等于每位数乘以该位数的权重
对于这个表达式,我们可以快速计算出a0=×%k(只有a0是指数为0)
计算出a0之后,我们只需要将x/=k,就可以将原本的a1放、到a0位置上,再同样的求解即可(乘以进制为k的权重,将之放到每一位上
代码模版如下:

ll x;cin>>x;
while(x)a[++cnt]=x%k,x/k;
reverse(a+1,a+1+cnt);//注意要翻转一下,才能使得高位在1的位置上

我们一般转换的是正数,所以顺着往里放就好,先放入的是高位所以在最后一定要做一次翻转,这样才是我们要得到的数


4.例题讲解

1.lanqiao OJ  2489

题目:

进制:十六进制的2021ABCD对应的十进制是多少

代码如下:(利用上述的第一个模版将字符串定义,由于是十六进制有英文字母混合在其中,所以要做出判定将之转换为对应的数字,即0到9之间减去0的ASCII码将之转换为该数的字符形式,否则减去A的ASCII码,加上一个10,接着就是套用模版了)

#include<bits/stdc++.h>
using namespace std;
const int N=50;
int a[N];
int main(){string s="2021ABCD";for(int i=0;i<s.length();++i){if(s[i]>='0'&&s[i]<='9')a[i+1]=s[i]-'0';else a[i+1]=s[i]-'A'+10;}int x=0;for(int i=1;i<=s.length();++i){x=x*16+a[i];}cout<<x<<'\n';return 0;
}

2.lanqiao OJ 2095

题目:

九进制转十进制:九进制正整数2022转换成十进制是多少

代码如下:(与上一道题的解法类似,并没有那么复杂,直接将每一位都减去0的ASCII码即可,还是利用第一套模版将之转换即可)

#include<bits/stdc++.h>
using namespace std;
const int N=50;
int a[N];
int main(){string s="2022";for(int i=0;i<s.length();++i){a[i+1]=s[i]-'0';}int x=0;for(int i=1;i<=s.length();++i){x=x*9+a[i];}cout<<x<<'\n';return 0;
}

3.lanqiao OJ 1230

题目:

进制转换:将指定的N进制数S转换为M进制(该题上难度了,灵活运用一下还是可以解决的,一个十进制转换,利用十进制数作为中转,利用第二套模版将之转换为对应的进制即可)

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=50;
int a[N];
//向十进制转换转换
int conver10(string s,int x){for(int i=0;i<s.length();++i){if(s[i]>='0'&&s[i]<='9')a[i+1]=s[i]-'0';else a[i+1]=s[i]-'A'+10;}int h=0;for(int i=1;i<=s.length();++i){h=h*x+a[i];    }return h;
}
//向目标进制转换
string converN(int x,int y){string s;while(x>0){if(x%y>9)s+=x%y-10+'A';else s+=x%y+'0';x/=y;}reverse(s.begin(),s.end());return s;
}int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T;cin>>T;while(T--){int N,M;cin>>N>>M;string s;cin>>s;cout<<converN(conver10(s,N),M)<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS集群 ----------------(直接路由 )DR模式部署

一、LVS集群的三种工作模式 lvs-nat&#xff1a;修改请求报文的目标IP,多目标IP的DNAT lvs-dr&#xff1a;操纵封装新的MAC地址&#xff08;直接路由&#xff09; lvs-tun&#xff1a;隧道模式 lvs-dr 是 LVS集群的 默认工作模式 NAT通过网络地址转换实现的虚拟服务器&…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

java SSM流浪宠物救助与领养myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM流浪宠物救助与领养管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系…

安卓Java面试题21-30

🔥 21、AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?🔥 AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。 缺陷: AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还…

Fragment

1.网格视图(随便插进来一条) 2.Fragment

谷歌开源的LLM大模型 Gemma 简介

相关链接&#xff1a; Hugging face模型下载地址&#xff1a;https://huggingface.co/google/gemma-7bGithub地址&#xff1a;https://github.com/google/gemma_pytorch论文地址&#xff1a;https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf官方博客&…

Linux——文件标识符

目录 一、文件基础 二、常见的C语言文件接口 三、系统文件接口 四、理解语言与系统文件操作的关系 五、如何理解一切皆文件 六、文件标识符再理解 一、文件基础 一个空文件&#xff0c;也会占用磁盘空间&#xff0c;这是因为文件不仅仅有存放在里面的内容&#xff0c;还…

IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)

一、使用fscanf实现&#xff0c;将一个文件中的数据打印到终端上&#xff08;类似于cat一个文件&#xff09; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat…

数组中删改元素(数据结构、顺序表、线性表)

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

Chapter20-Ideal gases-CIE课本要点摘录、总结(编辑中)

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…

ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记

在ROS 2中&#xff0c;Executor是一个核心概念&#xff0c;负责管理节点&#xff08;Node&#xff09;中的回调函数&#xff0c;如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调&#xff0c;从而在ROS 2系统中实现异步编程。 ROS 2 …

linux循环之until循环

1.until循环语法 until 循环控制条件 do commands done #until循环是在循环的顶部判断“循环控制条件”&#xff0c;如果“循环控制条件”一直为FALSE&#xff0c;那么就一直循环下去&#xff0c;这个与while循环刚好相反 2.until循环案例 [rootkibana ~]# cat until.sh…

七彩虹八渐变 外贸建站公司wordpress模板

进出口水果wordpress外贸模板 漂亮水果wordpress外贸模板&#xff0c;做水果进出品生意的外贸公司自建站官网模板。 https://www.jianzhanpress.com/?p3516 玩具wordpress外贸模板 简洁玩具wordpress外贸模板&#xff0c;适合做跨境电商外贸公司使用的wordpres外贸s网站主题…

FPGA 按键控制串口发送

按键消抖 消抖时间一般为10ms&#xff0c;我使用的板子是ACX720&#xff0c;晶振为50MHZ&#xff0c;20ns为一周期。 状态机 模块设计 设计文件 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2023/01/11 12:18:36 // Design Name: // Module Name…

IPv6扩展头(一)——逐跳选项头(Hop-by-Hop Options Header)

逐跳选项头&#xff08;Hop-by-Hop Options Header&#xff09;是IPv6协议中的一种扩展头部&#xff0c;它允许在数据包传输过程中每个跃点&#xff08;路由器或节点&#xff09;都能够读取并处理该头部中的信息。逐跳选项头的设计初衷是为了提供一种机制&#xff0c;在整个传输…

(学习总结)如何使用ChatGPT API训练自定义知识库

第一步&#xff1a; 安装OpenAI、GPT Index、PyPDF2和Gradio库 pip install openai pip install gpt_index pip install PyPDF2 pip install gradio 第二步&#xff1a;用VScode代码编辑器写app.py代码 记得替换api密钥 from llama_index import SimpleDirectoryReader, …

纯css实现太极八卦图

感觉最近好像闯鬼了&#xff0c;赶紧写个八卦图避避邪&#xff0c;开玩笑了&#xff0c;不废话&#xff0c;上菜&#xff0c;看效果上代码。 效果 代码&#xff0c;你们都是大佬&#xff0c;这里就不解释代码了 &#xff08;hover会转动喔&#xff09;。 <!DOCTYPE html&g…

LabVIEW智能Modbus监控系统

LabVIEW智能Modbus监控系统 在自动化和信息化迅速发展下&#xff0c;传统的监控系统已无法满足现代工业对于数据通讯和处理的高效率和高可靠性要求。为了解决这一问题&#xff0c;设计了一套基于LabVIEW的智能Modbus监控系统。该系统利用LabVIEW的图形化编程环境和Modbus协议的…

数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。

一、什么是数据处理 在数字孪生中&#xff0c;数据处理是指对采集到的实时或历史数据进行整理、清洗、分析和转化的过程。数据处理是数字孪生的基础&#xff0c;它将原始数据转化为有意义的信息&#xff0c;用于模型构建、仿真和决策支持。 数据处理是为了提高数据质量、整合数…

深入理解Servlet

目录&#xff1a; ServletWeb开发历史Servlet简介Servlet技术特点Servlet在应用程序中的位置Tomcat运行过程Servlet继承结构Servlet生命周期Servlet处理请求的原理Servlet的作用HttpServletRequest对象HttpServletResponse对象ServletContext对象ServletConfig对象Cookie对象与…