十进制整数转换为二进制整数
十进制整数转换为二进制整具体算法是:用2去除十进制整数,得到一个商和余数,再用2去除商,得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位依次排列起来。
整个算法比较简单,但输出结果得逆序输出。栈具有先进后出的特点,因此我采用栈来存储余数,实现逆序输出。
源代码:
#include<iostream>
using namespace std;
const int StackSize = 1024;
template <class T>
class SeqStack
{
public:
SeqStack() { top = -1; }
void Push(T x);
T Pop();
T GetTop();
int isEmpty();
private:
T data[StackSize]; //需要存放的栈元素的数组
int top; //栈顶指针
};
template<class T>
void SeqStack<T>::Push(T x) //入栈操作
{
if (top == StackSize - 1)
throw "上溢";
top++;
data[top] = x;
}
template<class T>
T SeqStack<T>::Pop() //出栈操作
{
if (top == -1)
throw "下溢";
int x = data[top];
top--;
return x;
}
template<class T>
T SeqStack<T>::GetTop()
{
if (top != -1)
return data[top];
else
return NULL;
}
template<class T>
int SeqStack<T>::isEmpty()
{
if (top == -1)
return 0;
else
return 1;
}
int main()
{
int num;
SeqStack<int>demo; //创建存储余数的栈
cout << "请输入一个十进制的数字:";
cin >> num;
while (num != 0)
{
demo.Push(num % 2);
num /= 2;
}
cout << "该数的二进制形式为:";
while (demo.isEmpty())
{
cout << demo.Pop();
}
cout << endl;
return 0;
}
实验截图:
输入输出:
校验:
实验总结与个人心得:
本次实验涉及的算法相对简单,栈结构的实现代码也很大程度上借鉴课本,实验过程顺利,并没有遇到过多错误。