蓝杯十九

作者: 逍遥_9353 | 来源:发表于2018-01-01 13:20 被阅读17次

/*十六进制转八进制

问题描述  给定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.h>

char h[100002],b[400002],e[400002];

int main()

{int n;scanf("%d",&n);

while(n--){

scanf("%s",h);

int i,len=0;/*先把16进制化成二进制——从后往前展开 */

for(i=strlen(h)-1;i>=0;i--){

int v;

if(h[i]>='0' && h[i]<='9')

v=h[i]-'0';

else

v=h[i]-'A'+10;

for(int j=0;j<4;j++){

b[len++]=v%2+'0';

v/=2;       

}       

}     

b[len]='\0';       

int x=0,cnt=1;       

int l=0;       

for(i=0;i<len;i++){              /*每三位二进制转成一位8进制,最后不足三位补0*/           

if(cnt==4||i==len-1){               

x=cnt*(b[i]-'0')+x;               

cnt=1;               

e[l++]=x+'0';               

x=0;           

}

else{             

  x=cnt*(b[i]-'0')+x;               

cnt*=2;               

}     

}       

i=l-1;       

while(i>=0 && e[i]=='0')            /*去掉前导0*/           

i--;       

if(i<0)           

printf("0");       

for (;i>=0;i--){            printf("%c",e[i]);        }       

printf("\n");   

}   

return 0;

}   

方法二、

#include <iostream>   

using namespace std;     

int main()  { 

int n=0; //记录输入数据的个数 

cin>>n;   

string sixTeen[10];  //用来记录输入的数据   

for(int i=0;i<n;i++)  { 

cin>>sixTeen[i];  }   

for(int i=0;i<n;i++)  { 

string eight;//记录八进制数据

string tow; //记录二进制数据   

char eig;    //转换为二进制 

for(int j=0;j<sixTeen[i].length();j++)  {

switch(sixTeen[i][j])  { 

case '0':tow+="0000";break;                 

case '1':tow+="0001";break;                 

  case '2':tow+="0010";break;                 

case '3':tow+="0011";break;                   

case '4':tow+="0100";break;                   

case '5':tow+="0101";break;                 

case '6':tow+="0110";break;                   

case '7':tow+="0111";break;                   

case '8':tow+="1000";break;                 

  case '9':tow+="1001";break;                   

case 'A':tow+="1010";break;                 

case 'B':tow+="1011";break;                 

  case 'C':tow+="1100";break;               

  case 'D':tow+="1101";break;                 

case 'E':tow+="1110";break;                   

case 'F':tow+="1111";break;                 

  default:break;    }    }    //转换为八进制  //首先补齐“0”

  int m=tow.length()%3;

if(m==1)  tow.insert(0,"00");

else if(m==2)  tow.insert(0,"0");  //进行转换 

if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0')) 

{

eig=(tow[0]-'0')*4+(tow[1]-'0')*2+(tow[2]);

eight=eight+eig;  }   

for(int k=3;k<tow.length();k=k+3)  { 

//eig=(tow[k*3]-'0')*4+(tow[k*3+1]-'0')*2+(tow[k*3+2]); 

//eight=eight+eig;   

if(tow.substr(k,3)=="000")  eight+="0";

else if(tow.substr(k,3)=="001")  eight+="1"; 

else if(tow.substr(k,3)=="010")  eight+="2";

  else if(tow.substr(k,3)=="011")

eight+="3";

  else if(tow.substr(k,3)=="100")

  eight+="4"; 

else if(tow.substr(k,3)=="101")  eight+="5"; 

else if(tow.substr(k,3)=="110")  eight+="6"; 

else if(tow.substr(k,3)=="111")  eight+="7";      }    //输出最终的八进制数 

cout<<eight<<endl;  }   

return 0; 

蓝杯十九 蓝杯十九 蓝杯十九

相关文章

  • 蓝杯十九

    /*十六进制转八进制 问题描述给定n个十六进制正整数,输出它们对应的八进制数。 输入格式输入的第一行为一个正整数n...

  • 蓝杯三十九

    算法提高 欧拉函数 时间限制:1.0s 内存限制:512.0MB 提交此题 说明 2016.4.5 已更新试题...

  • 蓝杯二十九

    算法训练 关联矩阵 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 有一个n个结点m条边的有...

  • 蓝杯二十

    /*数的读法 问题描述Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万...

  • 蓝杯十八

    /*矩形面积交 问题描述平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对...

  • 蓝杯四十

    算法训练 统计单词个数 时间限制:1.0s 内存限制:256.0MB 问题描述 给出一个长度不超过200...

  • 蓝杯十二

    一、/*分糖果 问题描述有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都...

  • 蓝杯九

    /*阶乘计算 问题描述 输入一个正整数n,输出n!的值。其中n!=1*2*3*…*n。算法描述n!可能很大,而计算...

  • 蓝杯十三

    一、/*打印下述图案问题描述使用循环结构打印下述图形,打印行数n由用户输入。打印空格时使用"%s"格式,向prin...

  • 蓝杯十五

    /*买不到的题目问题描述小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋...

网友评论

    本文标题:蓝杯十九

    本文链接:https://www.haomeiwen.com/subject/bsltnxtx.html