栈的应用:数制转换
- 格式:doc
- 大小:2.24 KB
- 文档页数:3
数制转换:
十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一种简单方法基于以下原理.
N=(N div d)*d+N mod d (其中:div为整除运算,mod 为求余运算.)
例如:10进制数1348转换为8进制为:2504.其运算过程如下:
N N div d N mod d
1348 168 4
168 21 0
21 2 5
2 0 2
假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其相等的八进制数,由于上述计算过程是从低位到高位顺序产生八进制数的各个位数,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反.因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数.
算法描述如下:
void conversion()
{
InitStack(s);
scanf(" %d",N);
while(N)
{
push(s,n%8)
N=N/8;
}
while(!StackEmpty(s))
{
Pop(S,e);
printf("%d",e);
}
}
这个是利用栈的先进后出特性的最简单的例子.在这个例子中,栈操作的序列是直线式的,即先一味地进栈,然后一味的出栈.也许有人会提出疑问:用数组直接实现不也很简单吗?仔细分析上述算法不难看出,栈的引入简化了程序设计的问题,划分了不同的关注层次,使思考的范围缩小了.而用数组不仅掩盖了问题的本质,还要分散精力去考虑数组下标增减等细节.
完整代码实现:
#include<iostream>
#include<stack>
using namespace std;
void change(int n,int d)
stack<int>s;
int temp;
int i=0;
if(n<d)
{
cout<<n<<endl;
}
else
{
while(n)
{
temp=n%d;
s.push(temp);
n=n/d;
}
while(!s.empty())
{
temp=s.top();
cout<<temp;
s.pop();
}
cout<<endl;
}
}
void main()
{
int x,y;
cout<<"请输入你要转换的数字&qu(参考:)ot;<<endl;
cin>>x;
cout<<"请输入你要转换的进制"<<endl;
cin>>y;
change(x,y);
}
递归实现十进制转换为八进制:/*
Name: conversion.cpp
Copyright:
Author: HeHe.wang
Date: 16-06-12 13:03
Description:
*/
#include <iostream>
using namespace std;
void conversion(int N,int d)
{
int temp=N%d;
N=N/d;
if(N==0)
cout<<temp;
else
{
conversion(N,d);
cout<<N%d;
}
}
int main()
{
conversion(7,2);
system("pause");
}文章出自:我爱程序员
/archives/1039.html 版权所有.本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源.