网站建设资讯

NEWS

网站建设资讯

二进制转换函数递归c语言,c语言转二进制库函数

怎样用递归的方法将二进制转换成十进制?(c语言)

#include stdio.h

10年积累的网站建设、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有大悟免费网站建设让你可以放心的选择与我们合作。

#include stdlib.h

int Math(int n)//这个是用来算二进制每一个位置上的数字所标示的实际值。例如:1001:第一个“1“ 表示8

{

int i,sum=1;

for(i=0;in;i++)

{

sum= sum*2;

}

return sum;

}

int judge(int n)//传进来的数值是二进制,但是他实际是十进制数,只不过只有1和0组成,

{

int sum=0,k=0;

while(n!=0)

{

int m=n%10;//获取每个位置的数字

sum=sum+m*Math(k);//求和

n=n/10;

k++;//用来表示第几个位置

}

return sum;

}

int main()

{

int m;

scanf("%d",m);

printf("%d\n",judge(m));

return 0;

}

自己写的,有什么问题一起讨论!thanks!

c语言: 编写递归函数把输入的一个负整数转换成二进制输出

根据评论要求,改进代码:

1、函数getBCode是题目要的递归函数,实现转二进制(最高位是符号位)。

思路是十进制数绝对值除以2求余,得到反向二进制原码,反向创建链表保存结果,最终得到的单向链表就是完整二进制数原码,之后根据正负性,负数取反+1。链表头添加符号位。

2、函数freeBny为释放链表,如要重复调用函数getBCode,每次调用需调用一次freeBny。

3、函数showBny是打印输出,为对齐显示,按4的倍数位打印,高位补齐的位数值均与符号位一致。

#include stdio.h

#include malloc.h

#include math.h

typedef struct binary//成员用char类型保存数值,不是'1'或'0'的ASCII码

{

char b;//一位二进制数0或1

struct binary *next;

}BNY;

BNY *getBCode(int n);//获得二进制数(最高位是符号位)

void showBny(BNY *bnyHead);//对齐打印二进制数(保证是4的倍数)

void freeBny(BNY *bnyHead);//释放二进制数链表空间

int main()

{

int n;

BNY bny,*bnyHead=bny;

while(1)

{

  printf("请输入一个整数:"),scanf("%d",n);

  bnyHead-next=getBCode(n);

  printf("转为二进制数:"),showBny(bnyHead);

  freeBny(bnyHead);

  printf("\n");

}

return 0;

}

void freeBny(BNY *bnyHead)

{

BNY *prev=NULL,*bny=NULL;

bny=bnyHead-next;

while(bny)

{

  if(prev) prev-next=NULL,free(prev),prev=NULL;

  prev=bny;

  bny=bny-next;

}

bnyHead-next=NULL;

}

void showBny(BNY *bnyHead)

{

int i,f=-1,len=0,n=0;

BNY *bnySave=bnyHead;

while(bnyHead-next)

{

  if(f==-1) f=bnyHead-next-b;

  len++;

  bnyHead=bnyHead-next;

}

if(len%4)

  n=4-len%4;

for(i=0;in;i++)printf("%d",f);

bnyHead=bnySave;

while(bnyHead-next)

{

  printf("%d",bnyHead-next-b);

  n++;

  if(n==4)printf(" "),n=0;

  bnyHead=bnyHead-next;

}

}

BNY *getBCode(int n)

{

int s,y;

static BNY*bnyPrev=NULL;

static int cy=0,f=-1;//加1进位用

if(f==-1 n=0)f=1;

if(f==-1 n0)f=0,cy=1;

n=abs(n);

BNY *bnyNew=NULL;

s=n/2,y=n%2;

bnyNew=(BNY *)malloc(sizeof(BNY));

if(!bnyNew) return NULL;

bnyNew-b=y;

// 如是负数,直接取反+1

if(!f) bnyNew-b=!(bnyNew-b);//从最低位开始,负数取反

if(cy)bnyNew-b=bnyNew-b+cy,cy=0;//负数+1

if(bnyNew-b1)bnyNew-b=0,cy=1;

bnyNew-next=NULL;

if(bnyPrev) bnyNew-next=bnyPrev;

bnyPrev=bnyNew;

n=s;

if(n==0)

{

  bnyNew=(BNY *)malloc(sizeof(BNY));//添加符号位

  if(!bnyNew) return NULL;

  if(!f)

      bnyNew-b=1;

  else

      bnyNew-b=0;

  bnyNew-next=bnyPrev;

  bnyPrev=NULL;

  cy=0,f=-1;

  return bnyNew;

}

return getBCode(n);

}

C语言用函数的递归调用将十进制数转化为二进制数

#includestdio.h

#define n 20

void change2(int t)

{ //将十进制数转换到存放二进制的数组中

int i;

int b[n]={0};

for(i=0;i20;i++)

{

b[i]=t%2;

t=t/2;

}

for(i=n-1;i=0;i--)

{

printf("%d",b[i]);

}

printf("\n");

}

void main(){

int demo;

printf("请输入一个十进制数:");

scanf("%d",demo);

change2(demo);

}


网站名称:二进制转换函数递归c语言,c语言转二进制库函数
URL地址:http://cdweb.net/article/dssehge.html