二进制转换为八进制
把要转换的二进制数按照3位一组从右边往左边分组。不足3位的在左边补上0
111001111001=001 110 001 111 001
#include<stdio.h>
#define MAX 1024
/*****************往左补0 n需要补0的个数*******************/
int * Move(int *Elem,int n,int length)
{
--length;
for(length;length>=0;--length)
{
Elem[length+n]=Elem[length];
}
if(n==1)
{
Elem[0]=0;//补1个0
}
if(n==2)//补两个0
{
Elem[0]=0;
Elem[1]=0;
}
return Elem;
}
/*****************二进制转换 为八进制 Elem为二进制数 length为有效二进制长度*******************/
void B_O(int Elem[],int length)
{
--length;
printf("二进制转换为八进制为:");
for(int i=0;i<length;)
{
int sum=Elem[i]*4+Elem[i+1]*2+Elem[i+2];
printf("%d",sum);
i+=3;
}
}
/*****************用于测试字符串长度 *******************/
void input(int Elem[],int length)
{
for(int i=0;i<length;++i)
{
printf(" %d ",Elem[i]);
}
}
int main()
{
int i=0;
int Elem[1024];
int flag=1;
while(flag)
{
scanf("%d",&Elem[i]);
if(Elem[i]!=0 &&Elem[i]!=1)
{
flag=0;
}
else
{
++i;
}
}
int length=i;
if(length%3==1)//需要补两个0
{
int *elem=Move(Elem,2,length);
length+=2;
printf("\n");
B_O(elem,length);
return 0;
}
if(length%3==2)//需要补一个0
{
int *elem=Move(Elem,1,length);
++length;
printf("\n");
B_O(elem,length);
return 0;
}
if(length%3==0)
{
B_O(Elem,length);
return 0;
}
return 0;
}
运行截图: