/* 数据结构分析与学习专栏
* Copyright (c) 2015, 山东大学 计算机科学与技术专业 学生
* All rights reserved.
* 作 者: 高祥
* 完成日期: 2015 年 4 月 4 日
* 版 本 号:009
*任务描述:栈模拟正整数的进制转换
*算法思想:
十进制数字num转换成system进制数字,每次将num%system结果入栈,
然后将num更新为num/system,直至num==0。顺序输出栈中的数字即得到结果。
*主要函数:
* 1.void InitStack(Stack &s);
* 2.void Push(Stack &s,int num);
* 3.void Output(Stack s);
*运行示例:
请输入要转换的非负十进制整数和转换成的进制数(输入中出现数字0 退出):123 2
转换后的数字是:1111011
请输入要转换的非负十进制整数和转换成的进制数(输入中出现数字0 退出):123 7
转换后的数字是:234
请输入要转换的非负十进制整数和转换成的进制数(输入中出现数字0 退出):1111 9
转换后的数字是:1464
请输入要转换的非负十进制整数和转换成的进制数(输入中出现数字0 退出):0 0
*/
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct
{
int * top;
int * base;
} Stack;
void InitStack(Stack &s);
void Push(Stack &s,int num);
void Output(Stack s);
int main()
{
while(1)
{
int num,system;
cout<<"请输入要转换的非负十进制整数和转换成的进制数(输入中出现数字0 退出):";
cin>>num>>system;
if(!num||!system)
{
return 0;
}
Stack s;
InitStack(s);
while(num)
{
Push(s,num%system);
num=num/system;
}
cout<<"转换后的数字是:";
Output(s);
}
}
void InitStack(Stack &s)
{
s.base=(int *)malloc(20*sizeof(Stack));
s.top=s.base;
}
void Push(Stack &s,int num)
{
*s.top=num;
s.top++;
}
void Output(Stack s)
{
s.top--;
while(1)
{
cout<<*s.top;
if(s.top==s.base)
{
break;
}
s.top--;
}
cout<<endl;
}
栈模拟数字进制转换
最新推荐文章于 2020-07-16 17:04:42 发布