栈的应用-进制转换(2,4,8,16)

今天学了栈,因此分享一下栈的基本应用,基本进制之间的相互转换。可通过提示输入,并且有严格的输入格式,比如说二进制输入的字符串当中就不能找过1;

由于时间有限没在把代码优化一下,毕竟我也是新手小白;


#include <stdio.h>

#include <stdlib.h>

#include<string.h>
#define Max 100
typedef struct {
int top;
char data[Max];
}stack;
int pow(int x,int y){
    if(y==1)return x;
    if(y==0)return 1;
return x*pow(x,y-1);
}
int judge(stack *s){//判断是否可以对栈进行操作
if(s->top==Max-1||s->top==-1)
    return 0;
return 1;
}
void push(stack *s,char x){//圧栈
   if(judge(s)){
      s->data[s->top]=x;
        s->top++;
  }
}
void pop(stack *s)//栈的弹出
{
    if(judge(s)){
            s->top--;

           printf("%c",s->data[s->top]);
        pop(s);
    }
}
void  Initialization(stack *s){//栈的初始化
    s->top=-1;
}
void Intager_conversion(stack *s,int x,int b){//10进制转2 8 16 进制
    s->top++;
    if(x<b)
    {
        s->data[s->top]=x;
        s->top++;
        return ;
    }
    while(x)
    {
        if(x%b<10)
        push(s,x%b+'0');
        else
            push(s,x%b-10+'a');
        x/=b;
    }
}
void Conversion_intager(stack *s ,char c[],int b,int *sum){//从2 8 16 进制转10进制
   int len=strlen(c),i=0;
   while(i<len){
    if(b==16){
        if(c[i]>='a')
            c[i]=c[i]-'a'+10;
        else
            c[i]-='0';
    }
    else
        c[i]-='0';
    *sum=*sum+pow(b,len-i-1)*c[i];
    i++;
   }
   return ;
}
int main() {
    stack s;
    int b1,b2,sum=0;
    char c[Max];
     printf("请输入你想从?进制到?进制\n");
     scanf("%d%d",&b1,&b2);
     printf("请输入进制字符串");
     scanf("%s",c);

     Initialization(&s);
     Conversion_intager(&s,c,b1,&sum);
     Intager_conversion(&s,sum,b2);
     pop(&s);
    exit(0);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值