马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼写的代码有些多了,应该主要是想照顾新手熟悉栈的特性。
整个进制转换程序是没有必要用到Push操作的。
可以直接把输入缓冲区的起始地址作为栈底,0结尾符前面一字节的地址作为栈顶 stack1.free_size=stack1.StackSize=strlen(szBin);
stack1.bottom=szBin;
stack1.top=&szBin[stack1.StackSize-1];
完整代码:#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct
{
char *top;
char *bottom;
int free_size;
int StackSize;
}binStack;
char stack_pop(binStack *stack1)
{
char ret;
if(!stack1->free_size) return -1;
ret = *stack1->top;
stack1->top--;
stack1->free_size--;
return ret;
}
int CharToInt(char n){return (n=='0'?0:1);}
int BinToDec(char *szBin)
{
binStack stack1;
int sum1=0;
if(!szBin) return -1;
stack1.free_size=stack1.StackSize=strlen(szBin);
stack1.bottom=szBin;
stack1.top=&szBin[stack1.StackSize-1];
for (int i=0;i<stack1.StackSize;i++)
sum1+= CharToInt(stack_pop(&stack1))*pow(2.,i);
return sum1;
}
int main()
{
char Buf[100]={0};
while (1)
{
int Dec;
printf("请输入二进制以:");
scanf("%s",Buf);
Dec=BinToDec(Buf);
printf("结果为:%d\n\n",Dec);
}
return 0;
}
|