/*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");
}
}