【蓝桥杯】十六进制转八进制 C++实现

2024-04-13 17:44

本文主要是介绍【蓝桥杯】十六进制转八进制 C++实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.题目信息

时间限制:1.0s 内存限制:512.0MB

问题描述

        给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

        输入的第一行为一个正整数n (1<=n<=10)。

        接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

        输出n行,每行为输入对应的八进制正整数。

【注意】

        输入的十六进制数不会有前导0,比如012A。

        输出的八进制数也不能有前导0。

样例输入

2
39
123ABC

样例输出

71
4435274

【提示】

        先将十六进制数转换成某进制数,再由某进制数转换成八进制。

2.算法实现

  1. 数字输入改写成字符串输入利用switch语句进行16进制到2进制的转换

  2. ps:为方便3位3位划分,2进制转8进制,字符串长度不是3的倍数的需要补0

  3. 通过algorithm库中的reverse函数翻转字符串和+=,完成补0操作,再翻转回来

  4. 利用switch语句和substr函数进行2进制到8进制的转换

  5. 去0输出,flag标志判断

3.完整代码

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{string s1,s2,ss;int n;cin>>n;while(n--){s1="";s2="";ss="";cin>>s1;cout<<s1<<" "<<s1.length()<<endl;for(int i=0;i<s1.length();i++){//switch 语句转化16进制为2进制switch(s1[i]){case '0':{s2+="0000";break;}case '1':{s2+="0001";break;}case '2':{s2+="0010";break;}case '3':{s2+="0011";break;}case '4':{s2+="0100";break;}case '5':{s2+="0101";break;}case '6':{s2+="0110";break;}case '7':{s2+="0111";break;}case '8':{s2+="1000";break;}case '9':{s2+="1001";break;}case 'A':{s2+="1010";break;}case 'B':{s2+="1011";break;}case 'C':{s2+="1100";break;}case 'D':{s2+="1101";break;}case 'E':{s2+="1110";break;}case 'F':{s2+="1111";break;}default:break;}}cout<<s2<<" 2进制"<<endl;//不一定是3的约数,所以要往前补0reverse(s2.begin(),s2.end());cout<<s2<<" 反转后"<<endl;int num=s2.length();if(num%3==1)s2+="00";else if(num%3==2)s2+="0";cout<<s2<<" 加0后"<<endl;//反转回来reverse(s2.begin(),s2.end());cout<<s2<<" 再反转"<<endl;//3位3位划分2进制转化为八进制for(int i=0;i<s2.length();i+=3){if(s2.substr(i,3)=="000")ss+="0";else if(s2.substr(i,3)=="001")ss+="1";else if(s2.substr(i,3)=="010")ss+="2";else if(s2.substr(i,3)=="011")ss+="3";else if(s2.substr(i,3)=="100")ss+="4";else if(s2.substr(i,3)=="101")ss+="5";else if(s2.substr(i,3)=="110")ss+="6";else if(s2.substr(i,3)=="111")ss+="7";}cout<<ss<<" 去0前"<<endl;//去0输入int flag=0;for(int i=0;i<ss.length();i++){if(flag==0&&ss[i]=='0')continue;cout<<ss[i];flag=1;}cout<<" 去0后"<<endl;}return 0;
}

4.补充

16进制转10进制

  • 16进制转2进制,按字符串处理,同上
  • 2进制转10进制,按数处理,用pow函数
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{string s1,s2;s1="";s2="";cin>>s1;for(int i=0;i<s1.length();i++){//switch 语句转化16进制为2进制switch(s1[i]){case '0':{s2+="0000";break;}case '1':{s2+="0001";break;}case '2':{s2+="0010";break;}case '3':{s2+="0011";break;}case '4':{s2+="0100";break;}case '5':{s2+="0101";break;}case '6':{s2+="0110";break;}case '7':{s2+="0111";break;}case '8':{s2+="1000";break;}case '9':{s2+="1001";break;}case 'A':{s2+="1010";break;}case 'B':{s2+="1011";break;}case 'C':{s2+="1100";break;}case 'D':{s2+="1101";break;}case 'E':{s2+="1110";break;}case 'F':{s2+="1111";break;}default:break;}}//2进制转10进制int sum=0;int len=s2.length();for(int i=0;i<len;i++){if(s2[i]=='1')sum+=pow(2,len-i-1);}cout<<sum;return 0;
}

这篇关于【蓝桥杯】十六进制转八进制 C++实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900793

相关文章

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc