进制转换(C++)

为了简化代码,只考虑10以内的进制转化

大于10的进制转换只需要在输出的时候加判断语句,例如if(top()==10)cout<<“A”;
注意栈顶元素返回和出栈的区分,前者只是返回一个值,栈顶指针没有变化。如果在if(top()==10) 里用出栈来得到栈顶元素,即使判断不对,栈顶元素也出栈了,进入下一条判断语句的栈顶元素就不是上一个栈顶元素了)

第一种方法:栈
因为进制转换的方法很契合栈的先进后出的特点,所以用栈来写,
总体思路
把计算出来的数都压入栈,最后再把栈中的元素全部输出

#include<bits/stdc++.h>
using namespace std;
class stackk {//加k防止重名
	int top;
	int a[100];
public:
	stackk()
	{
		top = -1;//初始化为空栈
	}
	~stackk()
	{
	}
	int gettop()
	{
		if (is_empty())//判断是否为空

		{
			cout << "error!" << endl;
			exit(0);
		}
		else
		{
			top--;
			return a[top + 1];
		}
	}
	void pushtop(int b)
	{
		if (is_full())
		{
			cout << "error!" << endl;
		}
		else
		{
			top++;
			a[top] = b;
		}

	}
	bool is_empty()
	{
		return top == -1;
	}
	bool is_full()
	{
		return top == 99;
	}
};
void transformm(int x, int y)
{
	stackk a;
	while (1)//先按计算方法把结果元素都入栈
	{
		if (x < y)
		{
			a.pushtop(x);
			break;
		}
		else
		{
			a.pushtop(x % y);
			x /= y;
		}

	}
	while (1)//出栈
	{
		if (a.is_empty())
		{
			cout << endl;
			break;
		}
		else
		{
			
				cout << a.gettop();
		}
	}
}
int main()
{
	int x, y;
	while (1)
	{
		cin >> x >> y;//x是十进制数,y是要转换的进制
		transformm(x, y);
	}

}

第二种方法:递归
关键思想;
利用递归先处理终止情况的特点
先让他最先输出最后的一种情况,然后再往回执行下一条语句,即下一个输出

比如:
4的二进制表示为100,他先到终止情况,输出一个1,然后返回上一层,输出x%y,这时这一层处理完了,再返回再上一层,同理输出x%y,由于没有更上层了,结束

#include<bits/stdc++.h>
using namespace std;

void  transformm(int x, int y)
{
	if (x < y)
		cout <<x;
	else
	{
		 transformm(x / y, y);
		 cout << x % y;
	}
}
int main()
{
	int x, y;
	while (1)
	{
		cin >> x >> y;//x是十进制数,y是要转换的进制
		transformm(x, y);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值