蓝桥杯:基础练习 十六进制转八进制

基础练习 十六进制转八进制

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

问题描述

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

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

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

注意

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

样例输入

239123ABC

样例输出

714435274

提示

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

________________________________________________________________________________________________________________

博客已搬迁:

________________________________________________________________________________________________________________

算法分析:

这个题目,,我们要看到 "每个十六进制数长度不超过100000" 这句话。注意是100000位,不是<100000;

我们这里主要思想是先将十六进制转化为二进制(每4位二进制对应1位十六进制),然后将二进制转化为八进制(每3位二进制对应1位八进制)。

如:十六进制 A1 二进制 1010 0001 八进制 (010 100 001)241

全部代码:

#include <iostream>#include <string>using namespace std;int main(){int n = 0, i = 0, j = 0, temp = 0, nNum = 0;char ch;string strHex[10];string strBin[10];string strOct[10];cin>>n;for (i = 0; i < n; ++i){cin>>strHex[i];}//十六进制转二进制for (i = 0; i < n; ++i){j = 0;while (strHex[i][j]){switch(strHex[i][j]){case ‘0’: strBin[i] += "0000"; break;case ‘1’: strBin[i] += "0001"; break;case ‘2’: strBin[i] += "0010"; break;case ‘3’: strBin[i] += "0011"; break;case ‘4’: strBin[i] += "0100"; break;case ‘5’: strBin[i] += "0101"; break;case ‘6’: strBin[i] += "0110"; break;case ‘7’: strBin[i] += "0111"; break;case ‘8’: strBin[i] += "1000"; break;case ‘9’: strBin[i] += "1001"; break;case ‘A’: strBin[i] += "1010"; break;case ‘B’: strBin[i] += "1011"; break;case ‘C’: strBin[i] += "1100"; break;case ‘D’: strBin[i] += "1101"; break;case ‘E’: strBin[i] += "1110"; break;case ‘F’: strBin[i] += "1111"; break;default:break;}++j;}}//二进制转化为八进制for (i = 0; i < n; ++i){j = strBin[i].size()-1;//获得长度while (strBin[i][j] && j>=0){temp = 3;nNum = 0;while (temp– && j>=0){if (‘1′ == strBin[i][j]){switch(temp){case 0: nNum += 4; break;case 1: nNum += 2; break;case 2: nNum += 1; break;default:break;}}–j;}strOct[i] += (nNum+’0’);}}//字符串逆序for (i = 0; i < n; ++i){temp = strOct[i].size()-1;for (j = 0; j <= temp/2; ++j){ch = strOct[i][j];strOct[i][j] = strOct[i][temp-j];strOct[i][temp-j] = ch;}}//打印for (i = 0; i < n; ++i){j = 0;while (strOct[i][j++] == ‘0’);//跳过前面的0for(–j; j < strOct[i].size(); ++j){cout<<strOct[i][j]-‘0’;}/*if (i != n-1)*/cout<<endl;}return 0;}

提交序号姓名试题名称提交时间代码长度CPU使用内存使用评测详情

24260zerone十六进制转八进制12-18 22:221.881KBC++正确100109ms2.207MB评测详情

转载请保留原文地址:

于是,月醉了,夜醉了,我也醉了。

蓝桥杯:基础练习 十六进制转八进制

相关文章:

你感兴趣的文章:

标签云: