25课2进制转10进制
小甲鱼写的代码有些多了,应该主要是想照顾新手熟悉栈的特性。整个进制转换程序是没有必要用到Push操作的。
可以直接把输入缓冲区的起始地址作为栈底,0结尾符前面一字节的地址作为栈顶
stack1.free_size=stack1.StackSize=strlen(szBin);
stack1.bottom=szBin;
stack1.top=&szBin;
完整代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct
{
char *top;
char *bottom;
intfree_size;
intStackSize;
}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;
for (int i=0;i<stack1.StackSize;i++)
sum1+= CharToInt(stack_pop(&stack1))*pow(2.,i);
return sum1;
}
int main()
{
char Buf={0};
while (1)
{
int Dec;
printf("请输入二进制以:");
scanf("%s",Buf);
Dec=BinToDec(Buf);
printf("结果为:%d\n\n",Dec);
}
return 0;
}
**** Hidden Message ***** @kklloo @牡丹花下死做鬼 @拈花小仙 @小甲鱼 :lol: {:9_235:}感谢分享,继续加油~ 看看 回复看看 销售资格证书
页:
[1]