zoukankan      html  css  js  c++  java
  • 用栈实现2进制数到十进制数的转换

    问题:用栈实现2进制数到十进制数的转换

    解析:用到<math.h>库中的pow函数,pow(2,i)表示2^i。当进行形参到实参的传送时,需要改变栈中的元素时传入&s,当不改变栈中元素,只对栈s进行操作时,传入s

    代码实现:

    /*利用栈的特点将2进制数转换为10进制数 */ 
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define ElemType char
    #define Init_Stack_Size 30//当前栈的最大存储容量 
    #define IncreasmentSize 1 //每次增加的大小 
    typedef struct SqStack *LinkStack;
    typedef struct SqStack
    {
    	ElemType *base;
    	ElemType *top;
    	int initSize;
    }SqStack;
    
    //初始化栈
    void InitStack(SqStack *s)
    {
    	s->base = (LinkStack)malloc(Init_Stack_Size * sizeof(ElemType));
    	if(!s->base)
    	{
    		printf("栈空间分配失败···
    ");
    		exit(0);
    	}
    	s->top = s->base;
    	s->initSize = Init_Stack_Size;
    } 
    
    //入栈操作
    void Push(SqStack *s,ElemType *e)
    {
    	if((s->top - s->base) >= s->initSize - 1)
    	{
    		s->base = (LinkStack)realloc(s->base,(s->initSize + IncreasmentSize)*sizeof(ElemType));
    		if(!s->base)
    		{
    			exit(0);
    		} 
    		s->initSize = s->initSize + IncreasmentSize;
    	} 
    	*s->top = *e;
    	s->top++;
    } 
    
    //出栈操作
    void Pop(SqStack *s,ElemType *e)
    {
    	if(s->top == s->base)
    	{
    		return;
    	}
    	s->top--;
    	*e = *s->top;
    } 
    
    //求栈的长度 
    int StackLen(SqStack *s)
    {
    	return (s->top - s->base);
    } 
    //2进制转换为10进制 
    void Bin2Dec(SqStack s)
    {
    	int i,len;
    	long int sum = 0;
    	ElemType c,e;
    	InitStack(&s);
    	printf("请输入您要转换的二进制数,输入字符 '#'结束:
    ");
    	scanf("%c",&c);
    	while(c != '#')
    	{
    		Push(&s,&c);
    		scanf("%c",&c);
    	}
    	getchar();//必须要有一个getchar(),因为输入时要输入enter键表示输入完成,如果没有这一句,enter键将被当做字符'
    '输入,影响结果 
    	len = StackLen(&s);
    //	printf("%d
    ",len);
    	for(i = 0;i < len;i++)
    	{
    		Pop(&s,&e);
    		sum = sum + (e-48) * pow(2,i);//这里要注意e是字符型的,0的ASCII码为48,1的ASCII码为49,要转换一下 才能进行运算 
    //		printf("%c",e);
    	}
    	printf("转换后的十进制数为:%ld
    ",sum);
    }
    
    int main()
    {
    	int i,j;
    	SqStack s;
    	InitStack(&s);	
    	Bin2Dec(s);
    	getch();
    	return 0;
    }
    

      

  • 相关阅读:
    如何让Android手机顺利连接上PC
    JNI简介
    SQLite代码与工具
    一个JNI的简单示例
    SQLite的WAL机制
    NDK编程中遇到的问题之一 “/androidndk/build/gmsl/__gmsl:512: *** nonnumeric second argument to `wordlist' function”
    与Unix相关的一些规范与组织
    php获得ip,真实IP
    div里的文字左右居中 上下居中
    php防止刷点击数的方法
  • 原文地址:https://www.cnblogs.com/devinblog/p/4162737.html
Copyright © 2011-2022 走看看