今天学了栈,因此分享一下栈的基本应用,基本进制之间的相互转换。可通过提示输入,并且有严格的输入格式,比如说二进制输入的字符串当中就不能找过1;
由于时间有限没在把代码优化一下,毕竟我也是新手小白;
#include <stdio.h>
#include <stdlib.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);
}