读书人

用c语言把十进制转换成二进制的程序

发布时间: 2012-10-11 10:16:10 作者: rapoo

求助,用c语言把十进制转换成二进制的程序中的错误不知道该如何修改啊,
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/
#define STACKINCRRMENT 10 /*存储空间增量*/
#define ok 1
#define error 0
#define Status int

typedef struct
{
int *base; /*栈尾指针*/
int *top; /*栈头指针*/
int stacksize; /*当前以分配的存储空间*/
}spstack;

Status Initstack(spstack *s)
{ /*构造一个空栈s*/
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s->base)
exit(1); /*存储分配失败*/
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return ok;
}


int Pop(spstack *s)
{ /*若栈不空,删除栈顶元素,并用e返回其值*/
int e;
if(s->top==s->base)
return error;
e=*(--s->top);
return e;
}


Status push(spstack *s,int e)
{ /*插入元素e为新的栈顶元素*/
if(s->top-s->base>=s->stacksize) /*栈满,追加存储空间*/
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCRRMENT)*sizeof(int));
if(!s->base)
exit(1);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCRRMENT;
}
*s->top++=e;
return ok;
}


void conversion(int p,int n,spstack *s)
{ /* 输入任意的十进制数转换成想换成的进制数*/
int m;
Initstack(s);
while(p)
{
push(s,p%n);
p=p/n;
}
while(s->base!=s->top)
{
m=pop(s);
printf("%d",m);
}
}



void main()
{
int p,n;
spstack s;
printf("输入要转换成?进制:\n");
scanf("%d\n",&n);
printf("输入要转换的进制数:\n");
scanf("%d\n",&p);
conversion(p,n,&s);
}

[解决办法]
if(s->top-s->base>=s->stacksize) 应该是==
[解决办法]

C/C++ code
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/#define STACKINCRRMENT 10 /*存储空间增量*/#define ok        1#define error    0#define Status inttypedef struct{       int *base; /*栈尾指针*/    int *top; /*栈头指针*/    int stacksize; /*当前以分配的存储空间*/} spstack;Status Initstack(spstack *s){ /*构造一个空栈s*/    s->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));    if (!s->base)        exit(1); /*存储分配失败*/    s->top = s->base;    s->stacksize = STACK_INIT_SIZE;    return ok;}int Pop(spstack *s){ /*若栈不空,删除栈顶元素,并用e返回其值*/    int e;    if(s->top==s->base)        return error;    e=*(--s->top);    return e;}Status push(spstack *s, int e){ /*插入元素e为新的栈顶元素*/    if(s->top-s->base >= s->stacksize) /*栈满,追加存储空间*/    {        s->base = (int*)realloc(s->base, (s->stacksize+STACKINCRRMENT)*sizeof(int));        if (!s->base)            exit(1);        s->top = s->base + s->stacksize;        s->stacksize += STACKINCRRMENT;    }    *s->top++=e;    return ok;}void conversion(int p, int n, spstack *s){ /* 输入任意的十进制数转换成想换成的进制数*/    int m;    Initstack(s);    do    {        push(s, p%n);        p = p / n;    } while (p);    while (s->base != s->top)    {        m = Pop(s);        if (m < 10)            printf("%d", m);        else            printf("%X", m);    }}int main(){    int p, n;    spstack s;    printf("输入要转换成?进制:\n");    scanf("%d", &n);    getchar();    printf("输入要转换的进制数:\n");    scanf("%d", &p);    conversion(p, n, &s);    return 0;} 

读书人网 >C语言

热点推荐