一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。
首先,数制转换是对一个数不断地取模,然后用类似栈的方式输出
那么代码需要怎么实现呢,先看看代码吧:
头文件:
#pragma once
#include<iostream>
#define MAXSIZE 100
using namespace std;
class Stack {
private:
int* data;//数组的起始地址
int top;//top指针
public:
//初始化函数
void Init() {
data = new int[MAXSIZE];
top = -1;
}
//输出
void Output() {
cout << "栈长:" << top + 1 << endl;
if (top > -1) {
cout << "栈的内容:" << endl;
for (int i = 0; i <= top; i++) {
cout << data[i] << ",";
}
}
cout << endl;
}
//压栈
void Push(int value) {
top++;
data[top] = value;
//等于data[top++]=value;
}
//出栈
void Pop(int& value) {
value = data[top--];
//等于value=data[top];top--;
}
//销毁
void Destory() {
delete[]data;
}
//返回栈长
int Getlen() {
return top + 1;
}
//判空
bool isEmpty() {
return top == -1 ? true : false;
}
//取栈顶元素
int Gettop() {
return data[top];
}
};
main函数:
#include<iostream>
#include"Stack.h"
using namespace std;
void fun(int n, int k) {
Stack s;
s.Init();
while (n) {
int t = n % k;
s.Push(t);
n /= k;
}
int temp = s.Getlen();
while (temp--) {
int t;
s.Pop(t);
switch (t)
{
case 10:
cout << "A";
break;
case 11:
cout << "B";
break;
case 12:
cout << "C";
break;
case 13:
cout << "D";
break;
case 14:
cout << "E";
break;
case 15:
cout << "F";
break;
default:
cout << t;
break;
}
}
s.Destory();
}
int main()
{
int n, k;
cout << "请输入一个正整数n:";
cin >> n;
cout << "请输入一个大于1小于等于16的正整数k:";
cin >> k;
fun(n, k);
}
我们可以看到,头文件里面包含了一个栈的类,该类包含了私有变量:
int* data;//数组的起始地址
int top;//top指针
以及一系列的函数,我们需要这些函数来帮我们完善代码
数制转换是什么?
比如说
十进制转化二进制123D=1111011B
可以用除法取余数,然后反序写就行,具体过程如下
数 余数
123/2=61 1
61/2=30 1
30/2=15 0
15/2=7 1
7/2=3 1
3/2=1 1
1/2=0 1
然后把余数反序写出来就是二进制结果了。
返回我们的代码,我们可以看到fun函数是我们输出我们的转化数字的关键代码
我们可以知道的是,在main函数里,我们已经让类构建好了stack的类,fun函数中需要一个一个的取出mod数,然后压入栈,压栈完成后,我们再一个一个的出栈,这就是我的代码