大致思路:创建动态储存空间输入要处理的数,转换为2进制后再转换为8进制
问题:2进制向8进制转换时需要在字符串首添加0,单纯地进行字符串连接会导致访问出错,不知道如何处理;
感觉当前方法效率过低,不知道是否有更简洁的方法。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int main()
{
int n,i;char *a,*b,*c;
b=(char *)malloc(400000);
memset(b, 0, 400000);
a=(char *)malloc(400000);
scanf("%s",a);
getchar();
for(i=0;i<strlen(a);i++)
switch(a[i])
{
case'0':strcat(b,"0000");break;
case'1':strcat(b,"0001");break;
case'2':strcat(b,"0010");break;
case'3':strcat(b,"0011");break;
case'4':strcat(b,"0100");break;
case'5':strcat(b,"0101");break;
case'6':strcat(b,"0110");break;
case'7':strcat(b,"0111");break;
case'8':strcat(b,"1000");break;
case'9':strcat(b,"1001");break;
case'A':strcat(b,"1010");break;
case'B':strcat(b,"1011");break;
case'C':strcat(b,"1100");break;
case'D':strcat(b,"1101");break;
case'E':strcat(b,"1110");break;
case'F':strcat(b,"1111");break;
}
printf("%s",b);
memset(a,0,400000);
n=strlen(b)%3;
c=(char *)malloc(400000);
//memset(c,0,400000);
*c='0';//创建只有一位“0”的字符串
i=0;
while(i<(3-n))
{
strcpy(a,c);
strcat(a,b);
strcpy(b,a);
};//通过字符串连接,将原字符串前补“0”
free(c);
memset(a,0,400000);
for(i=0;i<strlen(b)%3;i++)//每3位一组,转换为8进制
{
if(*(b+i*3)==0&&*(b+i*3+1)==0&&*(b+i*3+2)==0)strcat(a,"0");
if(*(b+i*3)==0&&*(b+i*3+1)==0&&*(b+i*3+2)==1)strcat(a,"1");
if(*(b+i*3)==0&&*(b+i*3+1)==1&&*(b+i*3+2)==0)strcat(a,"2");
if(*(b+i*3)==0&&*(b+i*3+1)==1&&*(b+i*3+2)==1)strcat(a,"3");
if(*(b+i*3)==1&&*(b+i*3+1)==0&&*(b+i*3+2)==0)strcat(a,"4");
if(*(b+i*3)==1&&*(b+i*3+1)==0&&*(b+i*3+2)==1)strcat(a,"5");
if(*(b+i*3)==1&&*(b+i*3+1)==1&&*(b+i*3+2)==0)strcat(a,"6");
if(*(b+i*3)==1&&*(b+i*3+1)==1&&*(b+i*3+2)==1)strcat(a,"7");
}
printf("%s",a);
}
麻烦了,谢谢。