蓝桥16进制转八进制c语言,2017.2.26 十六进制转八进制,Dev上运行正确,但在蓝桥杯上提交后提示运行错误,求大神指导...

已结贴√

问题点数:20 回复次数:10

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

2017.2.26 十六进制转八进制,Dev上运行正确,但在蓝桥杯上提交后提示运行错误,求大神指导

/*

问题描述

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

输入格式

输入的第一行为一个正整数n (1<=n<=10)。

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

输出格式

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

【注意】

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

输出的八进制数也不能有前导0。

样例输入

2

39

123ABC

样例输出

71

4435274

*/

#include

#include

int main(){

int n=0,i=0,j=0,k=0,m=0,w[10]={0},length=0;

char c[10]="",c2[50]="",c3[10][20],str[4]="";

for(i=0;i<10;i++){

strcpy(c3[i],"");

}

//c1为十六进制数,c2为转化成的二进制数,c3存储八进制数,每个结果为一行

scanf("%d",&n);

for(i=0;i

strcpy(c2,"");

k=0;

scanf("%s",c);

//转化成二进制数

length=strlen(c);

for(j=0;j

switch(c[j]){

case '0':strcat(c2,"0000");break;

case '1':strcat(c2,"0001");break;

case '2':strcat(c2,"0010");break;

case '3':strcat(c2,"0011");break;

case '4':strcat(c2,"0100");break;

case '5':strcat(c2,"0101");break;

case '6':strcat(c2,"0110");break;

case '7':strcat(c2,"0111");break;

case '8':strcat(c2,"1000");break;

case '9':strcat(c2,"1001");break;

case 'A':strcat(c2,"1010");break;

case 'B':strcat(c2,"1011");break;

case 'C':strcat(c2,"1100");break;

case 'D':strcat(c2,"1101");break;

case 'E':strcat(c2,"1110");break;

case 'F':strcat(c2,"1111");break;

}

}//转化成二进制数

//转化成八进制数

j=strlen(c2)-1;

while(j>=0){

if(j==0){//位数不足,只剩一位时

if(c2[0]=='0'){

c3[m][++k]='0';break;

}

else if(c2[0]=='1'){

c3[m][++k]='1';break;

}

}

else if(j==1){//位数不足,只剩两位时

if(c2[0]=='0'&&c2[1]=='0'){

c3[m][++k]='0';break;

}

else if(c2[0]=='0'&&c2[1]=='1'){

c3[m][++k]='1';break;

}

else if(c2[0]=='1'&&c2[1]=='0'){

c3[m][++k]='2';break;

}

else if(c2[0]=='1'&&c2[1]=='1'){

c3[m][++k]='3';break;

}

}

else {//取得三位01串

++k;

str[2]=c2[j];

str[1]=c2[--j];

str[0]=c2[--j];

if(strcmp(str,"000")==0)c3[m][k]='0';

if(strcmp(str,"001")==0)c3[m][k]='1';

if(strcmp(str,"010")==0)c3[m][k]='2';

if(strcmp(str,"011")==0)c3[m][k]='3';

if(strcmp(str,"100")==0)c3[m][k]='4';

if(strcmp(str,"101")==0)c3[m][k]='5';

if(strcmp(str,"110")==0)c3[m][k]='6';

if(strcmp(str,"111")==0)c3[m][k]='7';

--j;

}

}

w[m]=k;

m++;

}//转化为八进制数

//输出结果

for(i=0;i

k=w[i];

if(c3[i][k]!='0')printf("%c",c3[i][k]); //避免输出前导0

for(j=k-1;j>0;j--){

printf("%c",c3[i][j]);

}

printf("\n");

}

return 0;

}

求大神@ W @

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值