十进制整数转换为二进制,通常采用“除2取余,逆序排列”法:
1、首先用2整除一个十进制整数,得到一个商和余数
2、再用2整除前面得到的商,这时也会得到一个商和余数
3、重复上述步骤,直到商为0
4、将其获得的余数全部排列起来,并将其逆序排列,所得即为十进制对应的二进制。
算法实现思路:
最后得到的余数要求逆序排列,即为“后进先出”。而栈这一种线性表它刚好满足这种要求。栈是一种特殊的线性表,它所有的插入和删除操作都要求在同一端进行,这端称为栈顶,另一端则称为栈底。故我们采用栈这种线性表来实现我们的转换问题。
//这里涉及的栈的创建等先关代码就不在这里重复展示了,直接去看我其它帖子就好了
//这里主要提供了一种思路
int main()
{
十进制转换为二进制
int num;
cin>>num;
PSeqStack pastack=createEmptyStack(); //创建一个空栈
while(num/2!=0)
{
push_seq(pastack,num%2); //入栈存储
num=num/2;
}
push_seq(pastack,1);
while(pastack->t!=-1)
{
cout<<pastack->s[pastack->t];
pop_seq(pastack); //读一个树出栈一个数
}
}
然后十进制又该如何转换为二进制呢?这个就按到我们常规思路进行操作即可,不啰嗦,直接上代码。
int main()
{
int num;
cin >> num;
int a, sum = 0;
int i = 0;
while (num != 0)
{ //按照我们常规计算思路,使程序循环进行即可
a = num % 10;
num /= 10;
sum = sum + a *pow(2,i);
i++;
}
cout << "其对应的十进制函数为:" << sum << endl;
cout << sum << endl;
}