c语言将五进制转化为八进制,c语言把十六进制转换成八进制的问题??

题目如图:

434cecfcbc0fe0cd4c2cbe02da5f1155.png

测试结果:

c4deb5d6e19b1795d31f930b0a762d6e.png

我的代码:

#include

#include

#include

int zhuanhuan(char c)  //将十六进制字符转换为数值

{

if(c>='0'&&c<='9')

return c-'0';

else

return c-'A'+10;

}

int main()

{

int n,i,j,k,len,tmp;

char dy;

char *input[10],*output[10],*output2[10];

scanf("%d",&n);

dy=getchar();

for(i=0;i

{

input[i] = (char *)malloc(100000+1);  //储存输入的十六进制数

output[i] = (char *)malloc(100000*4+4);//储存二进制数

output2[i] = (char *)malloc(100000*3+3);//储存最终结果八进制数

gets(input[i]);

}

for(i=0;i

{

len=strlen(input[i]);

j=0;

k=len;

while(k--)  //将十六进制转换为二进制,1位十六进制数对应4位二进制数

{

tmp=zhuanhuan(input[i][j]);

output[i][j++]=((tmp>>3)&0x1);  //bit3

output[i][j++]=((tmp>>2)&0x1);  //bit2

output[i][j++]=((tmp>>1)&0x1);  //bit1

output[i][j++]=((tmp>>0)&0x1);  //bit0

}

//将二进制转换为八进制,3位二进制数对应1位八进制数,从低位开始转

//j为二进制数组下标,每个循环减3

//k为八进制数组下标,每个循环减1

j=len*4-1;

k=j/3;

output2[i][k+1]='\0';

for(;j>=0;j-=3)

{

if(j>=2)

output2[i][k--]=(output[i][j-2]<<2|output[i][j-1]<<1|output[i][j])+'0';

else if(j==1)

output2[i][k--]=(output[i][j-1]<<1|output[i][j])+'0';

else if(j==0)

output2[i][k--]=output[i][j]+'0';

}

k=k+1;

//去除前导的'0'字符(可能会影响判定结果)

while(output2[i][k]=='0')

k++;

//如果整个字符串都是'0',则直接输出结果'0',否则从首位非'0'开始输出

if(output2[i][k]=='\0')

printf("0\n");

else

printf("%s\n",&output2[i]);

}

for(i=0;i

{

free(input[i]);

free(output[i]);

free(output2[i]);

}

getchar();

}

有什么问题啊??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值