在题目锦囊中有提到,咱们可以通过2进制为媒介,达到16转8的目的。

在学习数电逻辑之后,咱们也都知道, 1位16进制可以代表4位2进制, 1位8进制可以代表3位二进制,为此我的代码大题思路就出来了,字符串存储,3位16进制求和入栈输出表示4位8进制,然后出栈输出,于是有了我最开始的代码。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int stack[40000];
void transform(string str, int length)
{int top = -1;for(int i = length - 1; i >= 0; i -= 3){int sum = 0;for(int j = 0; j < 3 && i - j >= 0; j++){int temp = str[i - j] >= '0' && str[i - j] <= '9' ? str[i - j] - '0' : str[i - j] - 'A' + 10;sum += (temp << (4 * j)); //因为每一个十六进制进制数都在二进制中占到4位,因此根据数字所处的位置不同,分别左移0位,4位和8位已达到他本来的十进制的样子}stack[++top] = sum;}while( stack[top] == 0){top--;}for(int i = top; i >= 0; i--){printf("%o", stack[i]); }cout<<endl;
}int main()
{string *str;int n;cin>>n;str = new string[n];for(int i = 0; i < n; i++){cin>>str[i];}for(int i = 0; i < n; i++){transform(str[i], str[i].size());}return 0;
}

但是很可惜的是,在评测平台上得的是0分, 我也跟别人试过一些数据,但是测的基本上不是一串F就是一串其他的,反倒是帮人找出来了一个错误,但是自己的错误还是没有找到,曾经还一度认为是我的栈开的不够大,所以导致的最后数据溢出,不能精确表示。后来请教了c语言吧的女神 幽罹焰我才发现了我的代码错误地方。错误地方就在于偷懒的  printf("%o", stack[i]);  因为我是偷懒的加和, 为此丢失了许多该有的前导0。

而1001转化之后的正确结果应该是10001。

为此为了修正这个错误,我最后还是转化为了字符串, 看当前的数字是否凑够了 4位,为此有了如下代码。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int stack[40000];
void transform(string str, int length)
{char buff[4]; int top = -1;for(int i = length - 1; i >= 0; i -= 3){int sum = 0;for(int j = 0; j < 3 && i - j >= 0; j++){int temp = str[i - j] >= '0' && str[i - j] <= '9' ? str[i - j] - '0' : str[i - j] - 'A' + 10;sum += (temp << (4 * j));}stack[++top] = sum;}while( stack[top] == 0){top--;}for(int i = top; i >= 0; i--){printf("%04o", stack[i]);}cout<<endl;
}int main()
{string *str;int n;cin>>n;str = new string[n];for(int i = 0; i < n; i++){cin>>str[i];}for(int i = 0; i < n; i++){transform(str[i], str[i].size());}return 0;
}

这样就能使答案正确输出。

【蓝桥杯】16转换8进制相关推荐

  1. 2022蓝桥杯b组--X进制减法--c语言

    [问题描述] 进制规定了数字在数位上逢几进一. X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某 种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 ...

  2. 蓝桥杯 ADV-117 算法提高 进制转换

    问题描述 程序提示用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出. 输入格式:输入只有一行,即三个字符. 输出 ...

  3. [Java] 蓝桥杯ALGO-85 算法训练 进制转换

    问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...

  4. 蓝桥杯 ALGO-85 算法训练 进制转换

    问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...

  5. C++16进制转换10进制

    废话不多,直接上代码: #include <iostream> #include <cmath> //要用到pow()函数必须要这个库 using namespace std; ...

  6. Python进制转换10进制转换为16进制,不使用hex函数

    笔试中遇到的问题 Python进制转换10进制转换为16进制,不使用hex函数 给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字 ...

  7. (大数)进制转换 —— 16、8进制转换成2进制

    (大数)进制转换 --16.8进制转2进制 16进制转2进制示例代码: #include <iostream> using namespace std; int main(){string ...

  8. Java实现任意进制转换拓展进制转换计算器

    JAVA实现蓝桥杯基础练习十六进制转换八进制-----------拓展进制转换计算器 这个题目我浏览了大量的道友的文章发现十分麻烦,但仍然从其中收益菲薄,所以在这里分享一下我认为最好的代码 impor ...

  9. 进制转换——36进制

    题目:进制转换类 题目描述 将M进制的数X转换为N进制的数输出. 输入 第一行,一个整数T,代表测试数据组数. 接着T行,输入32位二进制数 输出 输出X的N进制表示的数. 测试样例 输入 10 2 ...

最新文章

  1. 一个浙江商人立下的22条规矩
  2. 数据挖掘经典算法——先验算法
  3. Request Header Or Cookie Too Large
  4. server2003 IIS 错误 解决
  5. 习题2.1 简单计算器 (20 分)
  6. HDFView 3.1.2 在WIN10系统安装后打开出现黑框闪退的解决方法
  7. Java标识符和关键字(static,final,abstract,interface)
  8. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
  9. Spring的事务管理难点剖析(5):联合军种作战的混乱
  10. oracle 12 跟踪,Oracle 12C 块修改跟踪(Block chage tracking) 功能
  11. Delphi各个版本的官方下载地址,还在等机会
  12. 节约里程法解决VRP物流配送路径优化问题及局部优化改进-matlab代码
  13. 正点原子以太网转串口模块 调试和使用方法(实战详解)
  14. 哥伦比亚大学公众人物脸部数据集
  15. 手持PDA助力零售卖场管理
  16. 手游低延迟高性价比蓝牙耳机,300元学生党最爱五款蓝牙耳机
  17. 支付宝生活缴费视频课程
  18. 3dMax 基础概念和基本操作
  19. 直播类APP功能及技术难点
  20. 过关斩将属性配置出现问题

热门文章

  1. 观《我不是药神》有感
  2. C++笔记之return的用法
  3. mysql declare 变量_mysql中用declare定义变量值时报错
  4. 图算法—杰卡德相似度
  5. Discuz论坛短信群发、动网自动发贴源代码
  6. Cloudera Hadoop架构及Hadoop Common实现原理
  7. 强贴,搜集的搞笑小短句!
  8. 计算机考试提供的防伪标记适用于用户,未提供所需的防伪标记或者无效
  9. servlet有哪几种?
  10. 【STC89C52RC】感应开关盖垃圾桶