`
duoerbasilu
  • 浏览: 1481961 次
文章分类
社区版块
存档分类
最新评论

栈的应用:数制转换

 
阅读更多
数制转换:
十进制数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<<"请输入你要转换的数字"<<endl;
	cin>>x;
	cout<<"请输入你要转换的进制"<<endl;
	cin>>y;
	change(x,y);
}

递归实现十进制转换为八进制:
/*
  Name: conversion.cpp
  Copyright: www.52coder.net    
  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");
}
文章出自:我爱程序员 http://www.52coder.net/archives/1039.html 版权所有.本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics