1.除以2的冪,可以得到十進制中二進制對應的位數,然後通過從高位到低位的計算,將十進制數轉換成對應的二進制數(以字符串的形式)。
第二,反轉二進制數串,得到妳想要的反轉二進制數。
第三,十進制到二進制,字符串的逆序分別寫成函數。其他整數適用。
註意:我的代碼中的二進制不包含符號位。如果希望二進制的最高有效位有壹個符號,請自行修改(判斷正負後,在我的二進制轉換函數後的字符串最高有效位插入壹個符號位(realloc函數可以修改動態應用的字符串數組長度))。
# include & ltstdio.h & gt
# include & ltmalloc.h & gt
# include & ltstring.h & gt
# include & ltmath.h & gt
char * fun _ 10to 2(int num);//10無法轉換二進制數字(字符串表示形式)並返回NULL。
char * invert str(char * str);//反轉字符串成功返回反轉字符串,失敗返回NULL。
int main()
{
int num = 12;
char * str = NULL
for(num = 10;num & lt=20;num++,free(str),str=NULL)
{
str = fun _ 10to 2(num);
如果(!str)返回1;
Printf("十進制機構號:%d,二進制轉換後:%s\n ",num,str);
str = invert str(str);
Printf("二進制序列反轉後:%s\n\n ",str);
}
返回0;
}
char *invertStr(char *str)
{
char *p0=str,*p1=str,c;
如果(!str)返回NULL
while(*(p1+1)!= 0)p 1++;//將p1指向數組的最後壹個字符地址。
而(p0 & ltP1)//p0,P1分別指向字符串兩端,移動到中間,同時交換值。
{
c = * p0
* P0 = * p 1;
* p 1 = c;
p0++;
p 1-;
}
返回字符串;
}
char *fun_10To2(整數)
{
雙m = 0;
int b,sum = 0;
char *str=NULL,* p = NULL
While(1)//計算num對應的二進制中m+1位的最大個數。
{
b=(int)pow(2,m);
sum+= b;
if(sum & gt;=數字)
打破;
m++;
}
str =(char *)malloc(sizeof(char)*(m+2));//為結束符號0多留壹位。
如果(!Str){printf("異常!內存應用失敗!\ n ");返回NULL}
memset(str,0,sizeof(char)*(m+2));//字符數組用0填充
p = str
while(m & gt;=0)//轉換二進制字符串數
{
*p=num/(int)pow(2,m)+' 0 ';
num=num%(int)pow(2,m);
m-;
p++;
}
返回字符串;
}