當前位置:編程學習大全網 - 編程語言 - 逆序編程

逆序編程

思路:方法不止壹種。我給妳寫個大概的想法:

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++;

}

返回字符串;

}

  • 上一篇:六年級第21課的古文二則意思?
  • 下一篇:廣西二輕技師學院專業有哪些?專業介紹
  • copyright 2024編程學習大全網