C语言实现进制转化

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define  MAXSIZE   100   //根据需要自己定义MAXSIZE为顺序栈的最大存储容量
typedef struct stack
{
	int data[MAXSIZE];
	int top;
}SEQSTACK;

void initstack(SEQSTACK *s)//顺序栈初始化
{
    s->top=-1;//将栈顶指针指向初始的位置
}

int empty(SEQSTACK *s)    //判断栈空
{
	if(s->top==-1)
		return 1;
	else
		return 0;
}

void push(SEQSTACK *s,int x)//元素x进栈
{
	if(s->top==MAXSIZE-1)
	printf("存储空间已满,元素进栈失败!\n");
	else
	{
		  s->top++;//栈顶指针加1
		  s->data[s->top]=x;//将元素x送到栈顶位置
	}		
}

int pop(SEQSTACK *s)//元素出栈,出栈元素用e返回
{
	int e;
	if(empty(s)==-1)
	{
		printf("栈中元素已空,出栈元素失败!\n");
	    return -99;
	}
	else
	{
		  e=s->data[s->top];//将栈顶元素赋值给变量e
		  s->top--;//栈顶指针减1
		  return e;
	}

}

void conversion(SEQSTACK *s,int N,int r)  
   { //将十进制数N转换为r进制的数
    int   x;
    initstack(s);
	while (N!=0)  //此循环为入栈操作
    {  
          push(s,(N%r));//将N除以r所得的余数压入栈
	       N=(N/r); //N整除r所得的商赋值给N
    }
   
    while (!empty(s))  		//此循环为出栈操作
    {  
      x=pop(s);
      if(x==10)printf("A");
	  else if(x==11)printf("B");
	  else if(x==12)printf("C");
	  else if(x==13)printf("D");
	  else if(x==14)printf("E");
	  else if(x==15)printf("F");
	  else printf("%d",x);
    }
	printf("\n");
  }

void main()      
     {
		int number,r;    //number为待准备转换的十进制数,r为进制
		SEQSTACK stack;
		char choice;
		while(1)
		{
			printf("请输入一个十进制整数:");
			scanf("%d",&number);
			printf("选择将该数转换为几进制数(2,8,16):");
			scanf("%d",&r);
			fflush(stdin);
			printf("转换后的结果为:");
			conversion(&stack,number,r);
			printf("是否继续?按N结束,其他任意键继续…");
			scanf("%c",&choice);
			system("cls");
		    if(choice=='N'||choice=='n')
				break;
		}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值