十进制数任意转换2-9进制数--栈的应用

十进制数任意转换2-9进制数--栈的应用       

 

最近看了看数据结构,用栈的基本原理写了一个进制转换程序,在此分享一下,以便于后续查阅!

头文件nb.h如下

#include <stdio.h>
//#include <tchar.h>
#define stack_init_size 100
#define stackincreament 10
//定义栈的结构体
typedef struct
{
	int *base;
	int *top;
	int stacksize;
}sqstack;
int initstack(sqstack &s);
int push(sqstack &s,int e);
int pop(sqstack &s,int &e);

源文件nb.cpp如下

// 3.2ds.cpp : 定义控制台应用程序的入口点。
//十进制数任意转换为2-9进制数
#include "nb.h"
#include "iostream"
using namespace std;
//初始化栈
int initstack(sqstack &s)
{
	s.base=(int *)malloc(stack_init_size *sizeof(int));
	if(!s.base)
	{
		cout<<"init error!!\n";
		exit(0);
	}else
	s.top=s.base;
	s.stacksize=stack_init_size;
	return 0;
}
//入栈
int push(sqstack &s,int e){
	if(s.top-s.base>=s.stacksize){
		s.base=(int *)realloc(s.base,(s.stacksize+stackincreament)*sizeof(int));
		if(!s.base)cout<<"relloc error!!\n";
		s.top=s.base+s.stacksize;
		s.stacksize+=stackincreament;
	}
	*s.top++=e;
	return 0;
}
//出栈
int pop(sqstack &s,int &e)
{
	if(s.top==s.base)
		cout<<"pop error!!\n";
	e=*--s.top;
	return 0;
}
int main(int argc, char* argv[])
{
	sqstack st;
	initstack(st);//初始化栈
	int num,divnum,modnum,j,e;
	cout<<"请输入要转换的进制数(2-9):";
	cin>>j;
	cout<<"请输入原数据:";
	cin>>num;
	cout<<"转换结果如下:"<<endl;
	cout<<"("<<num<<")10=(";
	//将对j取余的数入栈
	while(num){
	push(st,num%j);
	num=num/j;
	}
	//出栈并且输出结果
	while(st.base!=st.top){
	pop(st,e);
	cout<<e;
}
cout<<")"<<j<<endl;
return 0;
}


测试结果如下:

$ g++ nb.cpp
$ ./a.out
请输入要转换的进制数(2-9):4
请输入原数据:23
转换结果如下:
(23)10=(113)4
$ ./a.out
请输入要转换的进制数(2-9):8
请输入原数据:85
转换结果如下:
(85)10=(125)8


思路: 使用相除法,将除得的结果依次入栈,然后依次出栈,即可输出转换结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值