用链栈实现任意进制的转化

 

    任意进制的转化基本思路是以十进制为中转,先将其他进制转为十进制,再由十进制转目的进制

/* 栈的结构类型 */
typedef char ElemType;
typedef struct Stack{
   ElemType elem[N];
   int top;
}Stack;
//初始化栈
void InitStack(Stack *S){
   S->top=-1;
}
//出栈
void Pop(Stack *S){
  if(S->top==-1){
      printf("stack is null");
   }else{
      S->top--;
   }
}
//入栈
void Push(Stack *S,ElemType e){
   S->top++;
   S->elem[S->top]=e;
}
//打印栈
void showStack(Stack *S){
   int i;
   if(S->top==-1){
      printf("stack is null");
   }else{
      for(i=S->top;i>=0;i--){
        printf("%c",S->elem[i]);
      }
   }
   printf("\n");
}
//十进制转其他进制
void statechange(Stack *S,int n,int i){
    int a=n,b;
    char c;
    do{
      b=a%i;
      if(b>9){
        c=b-10+'A';
      }else{
        c=b+'0';
      }
      Push(S,c);
      a=a/i;
    }while(a>0);
}
//其他进制转十进制
int changestate(Stack *L,int i){
   int k,n=0,l=L->top,g;
   for(k=0;k<=l;k++){
      g=L->elem[k]-'0';
      if(g>i){
          printf("输入的进制错误");
          return -1;
      }else{
           n+=pow(i,l-k)*(g);
      }
   }
   return n;
}


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值