用栈简单实现二进制与十进制整数的相互转换

十进制整数转换为二进制,通常采用“除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;
}

猜你喜欢

转载自blog.csdn.net/qq_58233310/article/details/124063285