数据结构c 进制转换问题(栈)

   用栈来实现进制进制转换  应使用辗转相除法 注意栈的操作
    #include <stdio.h>    
    #include <stdlib.h>          
    #define S_SIZE 100 
    #define STACKINCREMENT 10      
    typedef struct SqStack{    
       int *base;  
       int top;     
       int stacksize;   
    }SqStack;    
      
  //初始化空栈     
    void InitStack(SqStack &S)    
    {  
        S.base=(int *)malloc(S_SIZE*sizeof(int));  
        S.stacksize=S_SIZE;    
        S.top=-1;  
    }    
  
//判断空栈  
    int StackEmpty(SqStack &S)    
    {    
       if(S.top==-1)    
           return 1;    
       else    
           return 0;    
    }     
//判断栈满  
    int  StackFull(SqStack &S)  
    {  
       if(S.top==S.stacksize)    
           return 1;    
       else    
           return 0;    
    }  
   
    //进栈  
    void push(SqStack &S,int x)    
    {   
      if(StackFull(S))  
        printf("栈满\n");  
      S.base[++S.top]=x;   
    }    
    //出栈  
    int pop(SqStack &S)    
    {  
      int x;  
      if(StackEmpty(S))  
         printf("栈空\n");  
      x=S.base[S.top];   
      S.top--;  
      return x;  
    }   
    //进制转化函数  
    void convert(SqStack &S,int N,int n)    
    {    
      int i,x;   
      do     
      {  
        push(S,N%n);    
        N/=n;    
      } while (N!=0);     
        
      while(!StackEmpty(S))    
      {   
        x=pop(S);  
        if(x>9)      
    {   
          if(x==10) x='A';
          if(x==11) x='B';
          if(x==12) x='C';
          if(x==13) x='D';
          if(x==14) x='E';
          if(x==15) x='F';    //16 进制的转换
         
            printf("%c",x);  
        }  
        else    
            printf("%d",x);    
      }    
      printf("\n");    
    }    
   int main()    
    {   
        int n,N;//要转换成的进制数和要转换的数   
        SqStack s;   
        scanf("%d%d",&n,&N) ;  
                InitStack(s);  
        printf("%d转换为%d进制后为:\n",n,N);    
        convert(s,n,N);      
        
                return 0;  
 } 
这样就可以啦..........
  • 20
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值