十进制转换为二进制
十进制转二进制(整数部分):用2辗转相除至结果为1,将余数和最后的1从下向上倒序写就是结果。
二进制转十进制:从最后一位开始算,依次列为第0、1、2...位,第n位的数(0或1)乘以2的n次方,得到的结果相加就是答案。
1.判断n是不是为0(n != 0),n%2结果入栈,更新n = n/2
2.重复1,直到 n = 0
3.只要栈不为空就弹出栈顶内容
eg(13 <--> 1101 )
1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 = 13
13%2 = 1,入栈,n = 13/2 = 6
6%2 = 0,入栈,n = 6/2 = 3
3%2 = 1, 入栈,n = 3/2 = 1
1%2 = 1, 入栈,n = 1/2 = 0
出栈:1101
#include <iostream>
using namespace std;
void push(int c);
int pop(void);
int isempty();
char stack[512];
// 栈顶指针
int top = 0;
int main(void)
{
int num;
cout << "输入一个十进制整数:" ;
cin >> num;
while(num)
{
push(num%2);
num /= 2;
}
cout << "转换为二进制:";
while(!isempty())
{
cout << pop() ;
}
cout << endl;
return 0;
}
// 入栈
void push(int c)
{
// 赋值完后再自加
stack[top++] = c;
}
// 出栈,指针-1后,才能出栈
int pop(void)
{
// 用完之后再-1
return stack[--top];
}
// 判断栈是否为空
int isempty(void)
{
return top == 0;
}