堆栈的应用-进制的转换

学了堆栈,我们都会了解,它的一个显著的特点:先进后出,就像把东西放在桶子里面,先放的在下面,要拿就要从上面开始拿出来。了解这个原理,就好了。

来一个实用的吧,就是进制的转换。二,八,十,十六进制的相互转换。(本程序对十六进制,含有字母的没做处理,但由其他进制的可以转成十六进制)就是有一点点瑕疵。

不过,这个问题不大,把输入的字母转化为数字就行了。其他的都可实现啦。


#include<stdio.h>
#include<math.h>
struct stack{         //定义堆栈
int num[1000];
int top;
}stk;


void push(struct stack &stk,int p)   //入栈函数,引用
{  
if(stk.top>1000) return;
stk.num[stk.top++]=p;
}


int pop(struct stack &stk)
{
return (stk.num[stk.top--]);
}


int digit(int a)
{
int i=0;
while(a)
{
a/=10;
i++;
}
return i;
}
void resolve(int c,int a,int d)
{   int i,t,p,b,k=0;
    i=digit(a);
while(a){
int s=a%10;
a/=10; 
push(stk,s); 
}
stk.top--;
while(i&&stk.top!=-1){
p=pop(stk);
b=pow(c,i-1);
            k+=p*b;
i--;
}

stk.top=0;
while(k){
t=k%d;
k/=d; 
push(stk,t); 
} 
}


void putout(struct stack &stk)
{
int q;
stk.top--;
    while(stk.top!=-1){
q=pop(stk);
switch(q)
{
  case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
case 16:printf("H");break;
default :printf("%d",q);break;
}
}
}
void main()
{
int c, n,d;
while(1)
{
printf("请输入该数的进制,及该数,以及要转换的进制:");
scanf("%d%d%d",&c,&n,&d);
stk.top=0;
resolve(c,n,d);
printf("转化为%d进制后为:",d);
putout(stk);
printf("\n");
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值