蓝杯十九

/*十六进制转八进制

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


图片发自简书App

图片发自简书App

图片发自简书App
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容