Description 输入一个十进制数N,将它转换成二进制数输出。 Input 输入数据有多个,每个单独占一行。输入以0结束。 Output 每组输入数据对应的二进制形式,每组占一行。 Sample

/*Description
输入一个十进制数N,将它转换成二进制数输出。
Input
输入数据有多个,每个单独占一行。输入以0结束。
Output
每组输入数据对应的二进制形式,每组占一行。
Sample Input
10
126
0
Sample Output
1010
1111110*/

#include <stdio.h>
#include <stdlib.h>
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 10
typedef struct{
	int *base;
	int *top;
	int stacksize;
}SqStack; 

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;

int InitStack(SqStack &S)//创建栈 
{
	S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
	if(!S.base) exit(OVERFLOW);//存储分配失败 
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return OK;
} 

int Push(SqStack &S,int e)//往栈里写入数据 
{
	if(S.top - S.base >= S.stacksize)//栈满,追加存储空间 
	{
		S.base =  (int *)malloc((S.stacksize + STACK_INIT_SIZE)* sizeof(int));
	 	if(!S.base) exit(OVERFLOW);//存储分配失败 
	    S.top = S.base + S.stacksize;
	    S.stacksize = STACK_INIT_SIZE + S.stacksize;
	 } 
	 
	*S.top ++ = e;
	return OK;
}

int Pop(SqStack &S,int &e)//从栈里读出数据 
{
	if(S.top == S.base) return ERROR;
	e = *--S.top;
	return OK;
}

LinkList creat()//创建链表 
{
	LinkList head,p1,p2;
	int n = 0;
	
	p1 = p2 = (LinkList)malloc(sizeof(LNode));
	scanf("%d",&p1->data);
	while(p1->data != 0)
	{
		n++;
		if(n == 1) head = p1;
		else p2->next = p1;
		p2 = p1;
		p1 = (LinkList)malloc(sizeof(LNode));
		scanf("%d",&p1->data);
	 } 
	p2->next = NULL;
	return head; 
}

int main()
{
	LinkList L;
	L = creat();
	int e,N;
	while(L)
	{
	    SqStack S;
	    InitStack(S);
		N = L->data;
	    while(N){
		    Push(S,N % 2);
		    N = N / 2;
	    }
        while(S.top != S.base)
        {
    	    Pop(S,e);
	    	printf("%d",e);
    	}
    	printf("\n");
    	L = L->next;
	}	
}

一看到数值转换就会想到栈
或者用数组

/*Description
输入一个十进制数N,将它转换成二进制数输出。
Input
输入数据有多个,每个单独占一行。输入以0结束。
Output
每组输入数据对应的二进制形式,每组占一行。
Sample Input
10
126
0
Sample Output
1010
1111110*/

#include <stdio.h>
#define N 10
#define M 20

int main()
{
	int a[N],b[M],i = 0,n = 0,j,k;
	
	scanf("%d",&a[i]);
	while(a[i] != 0)
	{
		i++;
		scanf("%d",&a[i]);
	}
	n = i;
	
	for(i = 0;i < n;i++)
	{
		j = 0;
		while(a[i] != 0)
		{
			b[j] = a[i] % 2;
			a[i] = a[i] / 2;
			j++;
		}
		for(k = j - 1;k >= 0;k--)
		{
			printf("%d",b[k]);
		}
		printf("\n");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值