C++进制转换
对于进制转换我们知道
被除数除以除数,余数一定小于除数,
如果除数大于10,余数就有可能大于9,但表示的时候要输出字母表示。如16进制中"A"表示"10",“F"表示"15”。如36进制中“Z”表示"35"
那么我们可以看如下写的进制转换程序
运行结果:

源代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>using namespace std;int main(){ int n, m, a, b, c[1000]; cout << "请输入一个十进制数:"; cin >> n; a = n; cout << "你想将这个数转化为几进制(最小:2,最大:36):"; cin >> m; if(m < 2 || m > 36){ cout << "进制错误!"; return 0; } for(int i = 0; i < 1000; i++){ c[i] = m; } int count; for(count = 0; b != 0; count++){ b = a / m; c[count] = a % m; a = b; } cout << "对应的" << m << "进制数:"; for(int i = count - 1; i >= 0; i--){ if(c[i] != m){ if(c[i] < 10){ cout << c[i]; } else{ cout << (char)(c[i] + 55); } } } return 0;}<br> |
|
1
2
3
|
a,b,c分别表示被除数、商、余n表示要转换的数m表示目标进制<br>对于其中c[i]=m是初始化1个不可能的数,如8进制不存在8 |
以上代码是通过for循环来实现的进制转换,虽说没有问题,但我们完全可以用上学期学过的数据结构知识中的栈来写。

改进后:
#include<iostream>
using namespace std;
const int Size = 50;
class SeqStack
{
private:
int data[Size]; //数据存储数组
int top;
public:
SeqStack (){top=-1;}
~SeqStack (){}
void Push(int x); //入栈操作
void Pop(); //出栈操作
};
void SeqStack ::Push(int x)
{
top=-1;
int y;
int m=2;
if(top==Size-1) throw "上溢";
while(x!=0)
{
y=x%m;
data[++top]=y;
x=x/m;
};
}
void SeqStack ::Pop()
{
if (top == -1) throw "下溢";
while(top!=-1)
{
int x=data[top--];
cout<<x;
}
}
void main()
{
int i=1;
int number;
SeqStack a;
do{
cout<<"请输入一个十进制整数!"<<endl;
cin>>number;
a.Push(number);
a.Pop();
cout<<endl;
cout<<"若需要继续转换,请输入1;否则请输入0!"<<endl;
cin>>i;
}while(i==1);
}
那么这里我们可以看出我们是采用循环出栈的方式进行解决。
输出结果:

总结:
我们可以采用for循环的方式进行进制转换,但为了深化我们的程序思维,我们可以多角度、多方法的进行程序编写,结合所学的数据结构知识,进行编写程序以提升我们的程序思维和技术能力。

浙公网安备 33010602011771号