蓝桥杯 十六进制转8进制【模拟】
时间:2019-12-07
本文章向大家介绍蓝桥杯 十六进制转8进制【模拟】,主要包括蓝桥杯 十六进制转8进制【模拟】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
#include<stdio.h> #include<string> #include<iostream> #include<string.h> using namespace std; char a[16][5] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"}; int main(){ int n; char x[100000]; scanf("%d",&n); while(n--){ scanf("%s",x); string y; int lon = strlen(x); for(int i = 0; i < lon;i++){ int num; // 根据16进制字符串 从前往后 构建拼接 二进制字符串 if(x[i] >= 65 && x[i] <= 70){ //如果是 十六进制ABCDEF num = x[i] - 55; y.append(a[num]); }else{//十六进制的数字 num = x[i] -48; y.append(a[num]); } } int mk; int lon2 = y.size(); if(y[0] == '0'){ //如果该二进制字符串首字符是'0' for(int i = 1; i < lon2;i++) if(y[i] != '0'){ mk = i; break; }//二进制字符串首部有几位连续的'0' //按照'0'的位数向前移动字符串 for(int i = 0; i < lon2-mk;i++) y[i] = y[i+mk]; //将字符串最后由于移动而无效的位置删除 y.erase(lon2-mk,mk); } //由于字符串可能向前移动,所以一定要重新获取字符串的长度 lon2 = y.size(); int j = 0; int all = 0; int cc = 1; string resu;//最后的8进制串 //从二进制变为八进制,是将二进制字符串从后往前 //每3位一组【不满3位的,前面补字符'0'】,转换成对应的十进制字符,拼接构造 //为了简化补字符'0'的操作,直接将二进制字符串从后往前,每3位一组,每组按照百位、十位、个位求和 //不够3位的,由于补的是'0',所以直接无视这个操作,求和就行 char kk[2]; for(int i = lon2-1;i >= 0;i--){ int num = y[i]-48; //将字符'1' '0'变为 1 0,方便求和 all += num*cc; cc = cc * 10;//不断变化的百、十、个位 j++; if(j == 3 || i == 0){ // j == 3 是满足了 “三个一组” if(all == 1) // i == 0是满足了“到达二进制串的末尾,无视不够3位一组的情况下补'0'操作” kk[0] = '1'; if(all == 10) kk[0] = '2'; if(all == 11) kk[0] = '3'; if(all == 100) kk[0] = '4'; if(all == 101) kk[0] = '5'; if(all == 110) kk[0] = '6'; //char kk[2]的目的是,append()操作只针对字符串,所以一个长度为2的字符串数组搞定 if(all == 111) // 第一位放置 字符,第二位放字符串结束符'\0' kk[0] = '7'; if(all == 0) kk[0] = '0';//根据求和的数字,匹配对应的8进制字符 resu.append(kk);//拼接构建 all = 0; cc = 1; j = 0; } } int lon3 = resu.size(); for(int i = lon3 - 1;i >= 0;i--)//反向输出,,因为二进制串是从后往前扫描,而append()是加到后面的 printf("%c",resu[i]); cout<<endl; } return 0; }
原文地址:https://www.cnblogs.com/expedition/p/12003115.html
- Docker 容器操作
- Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx
- 基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用
- WebView 的 input 上传照片的兼容问题
- 在 Linux 上搭建Jekyll静态博客
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- 网易严选 App 感受 Weex 开发
- MBR勒索木马再度来袭:GoldenEye分析
- Docker Compose 1.18.0 之服务编排详解
- 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化
- 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理
- Ubuntu 17.04 x64 安装 Docker CE
- 这是一篇清晰易懂的 Rxjava 入门教程
- 可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java String Krains 2020-08-05
- 垃圾回收相关概念 Krains 2020-08-06
- 算法—判断字符串是否为IP地址
- 基于SpringBoot的Web前后端分离开发
- 【赵渝强老师】Docker的日志
- 超全递归技巧整理,这次一起拿下递归
- [译] React 测试驱动开发:从用户故事到产品
- 计算机基础之位运算 | 按位取反
- 关于php的ini文件相关操作函数浅析
- PHP中的输出缓冲控制
- SpringCloud微服务:基于Nacos组件,整合Dubbo框架
- [译] 使用 microbundle 打包 TypeScript 组件库
- 3分钟短文 | Laravel 获取模型查询生成的SQL语句
- 基于git的测试用例管理方案
- 【赵渝强老师】MongoDB管理用户的认证机制