实验内容
[问题描述]
十进制N和其它进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:
N=(n div d)*d+n mod d
( 其中:div为整除运算,mod为求余运算)
例如 (1348)10=(2504)8,其运算过程如下:
n n div 8 n mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
从中我们可以看出,最先产生的余数4是转换结果的最低位,这正好符合栈的特性即后进先出的特性。所以可以用顺序栈来模拟这个过程。试编程实现将10进制数转换成N进制数。
[基本要求]
对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。由于上述的计算过程是从低位到高位顺序产生的八进制数的各个数位,而打印输出,一般来说应从高位到地位进行,恰好和计算过程相反。因此可以先将计算过程中得到的八进制数的各位进栈,待相对应的八进制数的各位均产生以后,再使其按顺序出栈,并打印输出。即得到了与输入的十进制数相对应的八进制数。
【代码】
- #include<iostream>
- #include<stack>
- using namespace std;
- bool isInt();
- void conversion(int n,int x);
- int main()
- {
- int n;
- cout<<"请输入一个十进制数:"<<endl;
- cin>>n;
- cout<<"转换成8进制数为:"<<endl;
- conversion(n,8);
- system("pause");
- }
- void conversion(int n,int x)//n表示输入的十进制数,x表示进制
- {
- stack<int> s;
- if(n<=0)
- {
- cout<<"请输入一个正整数!"<<endl;
- }
- while(n>0)
- {
- s.push(n%x);
- n=n/x;
- }
- while(!s.empty())
- {
- cout<<s.top();
- s.pop();
- }
- }
注:以上内容仅供参考,如有问题欢迎指正。