十六进制转八进制
来源:互联网 发布:淘宝小二是什么意思 编辑:程序博客网 时间:2024/06/07 18:31
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】 输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】 先将十六进制数转换成某进制数,再由某进制数转换成八进制。
一开始没考虑数据的大小,写了十六进制 -> 十进制 -> 八进制,代码如下
#include <iostream>#include <string>#include <math.h>using namespace std;const int N = 10;string A[N];void hexToOct (int n){ int temp; // temp为十进制数 int x; char c;int wei; // wei为十六进制的位数 for (int i = 0; i < n; i++) { temp = 0; int j = 0; c = A[i][j];wei = 0; while ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {j++; c = A[i][j];wei++;}j = 0;c = A[i][j];while (wei){if (c >= 'A' && c <= 'Z') x = c - 'A' + 10;elsex = c - '0'; temp = temp + x*pow (16, wei - 1); j++; c = A[i][j];--wei;}j = 0;int b = 0;while (temp){x = temp % 8;temp /= 8;j++;b = b + x*pow(10, j-1);}cout << b << endl; }}int main (){ int n; cin >> n; for (int i = 0; i < n; i++) cin >> A[i]; hexToOct (n); return 0;}
改进了一下,十六进制 -> 二进制 -> 八进制,但还是敌不过大型数据的输入
#include <iostream>#include <string>#include <math.h>using namespace std;const int N = 10;string A[N];void ToOct (string B, int wei){ string C; int i = 0; int s = 0; wei = wei * 4; int j = wei % 3; if (j == 1) if (B[0] == '1') cout << "1"; if (j == 2) { C.assign(B, 0, 2); if (!C.compare ("01")) cout << '1'; else if (!C.compare ("10")) cout << '2'; else if (!C.compare ("11")) cout << '3'; } C = ""; // 清空C for (i = j; i < wei; i += 3) { C.assign(B, i, 3); // 将字符串B的第i位开始3个字符赋给字符串C if (!C.compare ("000") && i != 0) cout << '0'; else if (!C.compare ("001")) cout << '1'; else if (!C.compare ("010")) cout << '2'; else if (!C.compare ("011")) cout << '3'; else if (!C.compare ("100")) cout << '4'; else if (!C.compare ("101")) cout << '5'; else if (!C.compare ("110")) cout << '6'; else if (!C.compare ("111")) cout << '7'; C = ""; // 清空C } cout << endl;}void ToBin (int n){ string B; cout << "B max is " << B.max_size() << endl; char c; for (int i = 0; i < n; i++) { int j = 0; c = A[i][j]; while ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) { switch (c) { case '0': B = B + "0000"; break; case '1': B = B + "0001"; break; case '2': B = B + "0010"; break; case '3': B = B + "0011"; break; case '4': B = B + "0100"; break; case '5': B = B + "0101"; break; case '6': B = B + "0110"; break; case '7': B = B + "0111"; break; case '8': B = B + "1000"; break; case '9': B = B + "1001"; break; case 'A': B = B + "1010"; break; case 'B': B = B + "1011"; break; case 'C': B = B + "1100"; break; case 'D': B = B + "1101"; break; case 'E': B = B + "1110"; break; case 'F': B = B + "1111"; break; } j++; c = A[i][j]; } // cout << B << endl; //输出二进制数 ToOct(B, j); // 二进制转化为八进制函数 B = ""; }}int main (){ int n; cin >> n; for (int i = 0; i < n; i++) cin >> A[i]; ToBin (n); return 0;}
0 0
- 二进制、八进制、十六进制[转]
- 蓝桥杯 十六进制转八进制
- 蓝桥杯--十六进制转八进制。。。
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 练习 十六进制转八进制
- 蓝桥杯 十六进制转八进制
- HPUOJ1292 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 蓝桥杯:十六进制转八进制
- 十六进制转八进制
- runloop
- UVA11426 GCD
- class,类的详解, python, 笨方法学python
- SpringMVC_Spring_MyBatis_Maven框架搭建Java Web项目
- java关于集合的遍历与增强for循环的使用
- 十六进制转八进制
- Q89:全局光照(Global Illumination)——Path Tracing(只用于间接光照)
- 选择排序法的实现与分析
- C语言程序设计基础案例8.1
- 简单聊聊TestNG中的并发
- HTML5基础加强css样式篇(css过度覆盖问题)(二十一)
- 隐式Intent使用细节及常用Intent收藏
- Microsoft Web Platform Installer添加安装源
- [LeetCode]First Missing Positive(Java)