读书人

二进制转换十进制解决方案

发布时间: 2012-03-31 13:13:26 作者: rapoo

二进制转换十进制
# include <stdio.h>
# include <math.h>
# include <malloc.h>
# include <stdlib.h>
# define STACK_INIT_SIXE 20
# define STACKINCREMENT 10 //栈的增量
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;

}sqStack;
void intitStack(sqStack *s)
{
s ->base = (ElemType *)malloc(STACK_INIT_SIXE * sizeof(ElemType));
if (!s->base)
exit(0);
s ->top = s->base; //初始化栈
s->stacksize = STACKINCREMENT;

}
void Push(sqStack *s,ElemType e)
{
if (s->top - s->base >= s->stacksize) //栈满
{s->base = (ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize + STACKINCREMENT; }
*(s->top) = e;
s ->top++;

}
void Pop(sqStack *s,ElemType *e)
{
if(s->top ==s ->base)return;
*e = *--(s->top);


}
int StackLen(sqStack s)
{return (s.top -s.base);}
int main()
{
ElemType c;
sqStack s;
int len ,i;
char a[10];
double sum = 0;
printf("Please input a Binary digit\n");
intitStack(&s);//创建一个栈
scanf("%c",&c);
while(c !='#')
{
Push(&s,c);
scanf("%c",&c);
}
getchar();
len = StackLen(s);
for(i =0;i<len;i++)
{Pop(&s,&c);

sum = sum + (c -48)*pow(2,i);
}

printf("Decimal is %ld \n",sum);

return 0;
}



求大侠们看看为什么转换不了呢?输入什么最后都没转化啊!谢谢了

[解决办法]

C/C++ code
十进制转化为二进制 熟练使用 itoa()库函数 #include<stdio.h> #include<stdlib.h> int main() { int num,result; scanf("%d",&num); //输入一个十进制数 char str[20]; result = atoi( itoa(num, str, 2) ); printf("%d\n", result); return 0; }
[解决办法]
最后一句printf("Decimal is %ld \n",sum);不对,sum是double类型,用%f吧
[解决办法]
探讨
最后一句printf("Decimal is %ld \n",sum);不对,sum是double类型,用%f吧

读书人网 >C语言

热点推荐