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循环的方式进行进制转换,但为了深化我们的程序思维,我们可以多角度、多方法的进行程序编写,结合所学的数据结构知识,进行编写程序以提升我们的程序思维和技术能力。

posted @ 2022-03-02 15:30  超猛暴龙战士  阅读(729)  评论(0)    收藏  举报