进制转换(C++实现)

2023-11-08

写在前面

小学期作业中碰到一题进制转换,自己写的过程很是坎坷。

想到没有系统学习过进制转换的知识,于是搜索资料进行一个查漏补缺,本文仅作为学习记录。


参考资料

[C++]手把手编程实现进制转换_哔哩哔哩_bilibili 模版学习自咸鱼君

http://t.csdn.cn/RXk7C 感谢学长支撑我的小学期(

http://t.csdn.cn/iRV3m 开篇的例子很棒!


本文知识点

  1. 任意进制到十进制,十进制到任意进制的转换

  2. 十进制到任意进制时使用进行存储和输出

  3. 输出时使用的字符转换写法


模版:不同进制之间的数据转换

问题描述:

请你编一程序实现两种不同进制之间的数据转换。

输入格式:

共三行,第一行是一个正整数,表示需要转换的数的进制(1<n<16),第二行是一个n进制数,若n>10则使用大写字母A-F表示数码10-15,并且该n进制对应的十进制的值不超过10e9,第三行也是一个正整数,表示转换之后的数的进制(1<m<16)。

输出格式

一个正整数,表示转换之后的m进制数。

样例输入

 16
 FF
 2

样例输出

 11111111

AC代码

 #include<bits/stdc++.h>//万能头
 //进制转换
 using namespace std;
 ​
 int main() 
 {
     string num; //需要转换的n进制数,用字符数组char num[maxn]也是一样的
     int n, m, ten = 0; //ten为转换成的十进制数
     cin >> n >> num >> m;
 ​
     //1、n进制转换为十进制
     int len = num.size(); //获取num长度
     for (int i = len-1, k = 0; i >= 0; i--, k++) //从右至左倒序,k为n的k次方(同二进制)
     {   
         int tmp;
         if (num[i] >= 'A' && num[i] <= 'F') //如果n大于10
             tmp = num[i] - 'A' + 10;
         else
             tmp = num[i] - '0'; //使用ascii码实现字符->数字的转换
 ​
         ten += tmp * pow(n, k); //累加
     }
 ​
     //2、十进制转换为m进制,在这里我们使用栈进行存储
     stack<char> stk;
     while(ten)
     {   
         int u = ten % m;
         ten /= m;
         char tmp;
 ​
         if (u < 10)
             tmp = u +'0';
         else
             tmp = u + 'A' - 10;
         
         stk.push(tmp); //入栈
     }
 ​
     //3、输出答案
     while(stk.size())//逆序输出
     {
         cout << stk.top();
         stk.pop();
     }
     cout << endl;
     return 0;
 ​
 }

例题:小A的计算器

问题描述:

以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示。

现在小A要在这个操作系统上实现一个计算器,这个计算器要能实现26进制数的加法运算。

你能帮小A实现这个计算器吗?

输入格式:

输入的第一行包括一个整数N(1<=N<=100)。

接下来的N行每行包括两个26进制数x和y,它们之间用空格隔开,每个数的位数最多为10位,我们可以保证相加的结果的位数最多也是10位。

每个数会用小A所设计的操作系统中的表示方法来表示,如:bsadfasdf。

即每个数的各个位均由26个小写字母a-z中的一个来表示。

输出格式:

输出x和y相加后的结果,结果也要用题目中描述的26进制数来表示。

样例输入

 4
 ba cd
 c b
 b c
 ba c

样例输出

 dd
 d
 d
 bc

AC代码

#include<bits/stdc++.h>
 //小A的计算器:进制转换
 using namespace std;
 ​
 int main() 
 {
     int n;
     string x, y; //字符形式存储两个6进制数
     cin >> n;
 ​
     while(n--)
     {
         cin >> x >> y;
         int lenx = x.size();
         int leny = y.size();
         int a = 0, b = 0; //转换成的十进制数
         int sum; //转换成十进制后的总和
 ​
         //1、26进制转换到十进制
         for (int i = lenx - 1, k = 0; i >= 0; i--, k++)
             a += (x[i] - 'a') * pow(26, k);
         for (int i = leny - 1, k = 0; i >= 0; i--, k++)
             b += (y[i] - 'a') * pow(26, k);
         sum = a + b;
         //cout << sum << endl; //检查一下26进制转到10进制有没有问题
 ​
         //2、十进制的sum转换到26进制并输出(栈)
         stack<char> stk;
         while(sum)
         {   
             int u = sum % 26;
             sum /= 26;
             stk.push(u + 'a'); //入栈
         }
 ​
         //3、输出答案
         while(stk.size())//逆序输出
         {
             cout << stk.top();
             stk.pop();
         }
         cout << endl;
         }
     return 0;
 }

写在最后

如果你能看到这里,很感谢啦!

这里是yubisco7的CSDN博客,他在这里记录自己的计算机学习过程。

欢迎交流、提出建议或指正错误,希望我们能够共同进步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进制转换(C++实现) 的相关文章

  • <并发编程>学习笔记------(一) 并发相关理论

    前面 并发编程可以总结为三个核心问题 分工指的是如何高效地拆解任务并分配给线程 同步指的是线程之间如何协作 互斥则是保证同一时刻只允许一个线程访问共享资源 并发相关理论 可见性 原子性和有序性 核心矛盾 CPU 内存 I O 设备的速度差异

随机推荐

  • OpenWrt通过终端查询版本

    一 cat etc banner 二 cat proc version 三 cat etc openwrt release 四 uname a 五 opkg version
  • go操作数据库Null类型转换失败问题

    sql NullString 解决数据库中null值的问题 go操作DB需要注意的
  • 向MySQL数据库表内导入txt和csv文件数据

    本文总结了在CentOS7上使用 LOAD DATA
  • iOS开发时如何使用 Launch Screen Storyboard

    原文 http useyourloaf com blog using a launch screen storyboard 静态启动图片 启动图片是iOS加载App的时候系统响应的直观呈现 近几年 随着屏幕尺寸的增多 制作相应的静态图片就变
  • Netty消息接收类故障案例分析

    Netty 进阶之路 分布式服务框架原理与实践 作者李林锋深入剖析Netty消息接收类故障案例 李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿 感兴趣的同学可以持续关注 1 背景 1 1 消息接收类故障 尽管Netty应用广
  • 13-ESP8266连接MQTT服务器发送数据

    Author teacherXue 一 什么是MQTT 定义 MQTT是一个基于客户端 服务器的消息发布 订阅传输协议 MQTT协议是轻量 简单 开放和易于实现的 这些特点使它适用范围非常广泛 在很多情况下 包括受限的环境中 如 机器与机器
  • HTML 列表

    HTML 列表和 CSS 列表属性 在 HTML 中 列表主要有两种类型 无序列表 ul 列表项用的是项目符号标记 有序列表 ol 列表项用的是数字或字母标记 CSS 列表属性使您可以 为有序列表设置不同的列表项标记 为无序列表设置不同的列
  • 产品经理工作积累(3)

    按职业经理的层次模型产品经理又可分工匠型 元帅型和老师型 1 工匠型 工匠型产品经理主要的价值在于 在某个专业领域里其技能的娴熟程度 2 元帅型 元帅型产品经理 能够在一个领域中带领一帮人来完成一个特定的项目 他的能力体现在全局范围的组织
  • JQuery Tab 滑动们导航菜单效果

    这种效果目前互联网上用的很多希望可以给大家提供帮助 图片是采用css sprites实现的 在tab例子的基础上尽行了扩展 符合web标准 兼容多浏览器 效果01预览 http www yuyadong com test JQuery Ta
  • 云主机-生产环境下离线安装Docker部署应用

    离线安装Docker 配置Docker以及使用Docker 作为生产环境下离线部署Docker 以及使用Docker部署应用系统 下面的记录做出非常详细的操作步骤 下载Docker离线安装包 Linux版本下载地址 Index of lin
  • SERDES关键技术

    目录 一 SERDES介绍 二 SERDES关键技术 2 1 多重相位技术 2 2 线路编解码技术 2 2 1 8B 10B编解码 2 2 2 控制字符 Control Characters 2 2 3 Comma检测 2 2 4 扰码 S
  • SpringBoot项目使用通用Mapper

    SpringBoot项目使用通用Mapper 前言 后端业务开发 每个表都要用到单表的增删改查等通用方法 而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作 通用mapper配置 1 添加maven
  • 三种交换值的方式

    1 使用临时变量temp作为一个中转站交换 int a 4 b 9 temp temp a a b b temp 缺点 占用内存 效率最低 2 利用加减法实现两个变量之间的交换 int a 1 b 2
  • centos中 系统自带python2 无法使用pip命令

    centos中 系统自带python2 无法使用pip命令 yum y install epel release yum install python pip 升级pip 可选 pip install upgrade pip pip无法安装
  • chart.js使用用法

    下面的链接是不同的图的实例 请先看本文了解大概 再看不同的统计图的实现 使用chart js画折线图 甜甜圈图和饼状图 chart js使用用法 定义画布
  • 【Android取证篇】华为手机助手支持备份的数据类型-支持第三方应用

    Android取证篇 华为手机助手支持备份的数据类型 支持第三方应用 数据备份至电脑端 使用数据线或WLAN连接 取证注意断网操作 suy 文章目录 Android取证篇 华为手机助手支持备份的数据类型 支持第三方应用 一 支持备份的数据
  • 这个小程序厉害了!一键生成花式昵称,让你的微信从此与众不同!

    微信作为互联网时代的主要通讯工具 已经有10亿人在使用了 看朋友圈好友的微信昵称也是千奇百怪 如何才能制作专属于自己的昵称呢 今天小编给大家分享一款有意思的微信小程序 能够帮助我们制作出不一样的微信昵称 一起来看看吧 第一步 在微信中搜索
  • Makefile篇卷首语

    2023年5月24日 周三下午 今天我决定开始学习Makefile 一是因为很多开源软件都有Makefile 不会Makefile真的不行 我不知道怎么用Makefile来生成软件 也无法通过Makefile来查看我缺了什么依赖 因为我看不
  • Linux工具——gcc

    目录 一 gcc简介 二 C语言源文件的编译过程 1 预处理 2 编译 3 汇编 4 链接 5 动静态库 一 gcc简介 相信有不少的小白和我一样在学习Linux之前只听说过visual studio 其实这个gcc这个编译器实现的功能便是
  • 进制转换(C++实现)

    写在前面 小学期作业中碰到一题进制转换 自己写的过程很是坎坷 想到没有系统学习过进制转换的知识 于是搜索资料进行一个查漏补缺 本文仅作为学习记录 参考资料 C 手把手编程实现进制转换 哔哩哔哩 bilibili 模版学习自咸鱼君 http