栈的应用:数制转换

  • 格式:doc
  • 大小:2.24 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数制转换:

十进制数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 版权所有.本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源.