C++实现任意进制转换

数据结构 专栏收录该内容
14 篇文章 0 订阅

使用C++的STL的栈,实现2,8,10,16,36任意进制的数的转换。

思路是不管输入什么数,首先把它转换成10进制的数,再从十进制的数转换为别的进制。
<pre name="code" class="cpp">#include "stdafx.h"
#include "JinZhi.h"
#include <stack>
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// The one and only application object

CWinApp theApp;

using namespace std;

/***********************************************
函数作用:把十进制转换为其他进制
参数说明:int iTen:十进制数
		  int iTran:待转换数的进制
		  char * sRet:转换后获得的字符串
************************************************/
void tenToOther(int iTen,int iTran,char * sRet)
{
	stack <int> stackInt;//声明一个栈
	int iTop = 0;
	while(iTen > 0)
	{
		stackInt.push(iTen%iTran);//每次把第一次的取余的数压入栈
		iTen /= iTran;//十进制数每次对待转进制取整
	}
	
	int iCnt =0;
	while(!stackInt.empty())
	{
		iTop = stackInt.top();//每次得到栈顶元素
		stackInt.pop();//取出后要进行出栈操作
		if (iTop <10 )
			sRet[iCnt++] = iTop+'0';
		else//如果>=10,变成相应的字母
			sRet[iCnt++] = iTop -10 +'a';
	}
	sRet[iCnt] = 0;
}
/***********************************************
函数作用:把其他进制的数转换为十进制的数
参数说明:char * sInit:输入待转换的字符串
		  int iTran:待转换数的进制
		  int iLen:待转换的字符串的长度
************************************************/
int otherToTen(char * sInit,int iTran,int iLen)
{
	int iTenSum = 0;
	int iTenTmp = 0;

	for (int i = 0; i < iLen; i++)//循环扫描字符串
	{
		if ( sInit[i] <= '9')//如果某位小于9,转为int型*相应的倍数
			iTenTmp  = (int)((sInit[i]-'0')*pow(iTran,(iLen-i-1)));
		else//如果某位大于9,转为int型,其中87是用'a'-10,计算出来
			iTenTmp  = (int)((sInit[i]-87)*pow(iTran,(iLen-i-1)));
		iTenSum += iTenTmp;
	}
	return iTenSum;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	int iInit;
	int iInput;
	int iTrans;
	char sOut[10];
	char sInput[10];

	cout<<"输入进制"<<endl;
	cin>>iInit;
	cout<<"输入一个数"<<endl;
	cin>>sInput;

	cout<<"输入待转换的进制"<<endl;
	cin>>iTrans;
	
	int iTenTmp = otherToTen(sInput,iInit,strlen(sInput));
	tenToOther(iTenTmp,iTrans,sOut);
	cout<<sOut;
	return nRetCode;
}
 
 运行情况如图
 
源程序下载
http://download.csdn.net/detail/luoyikun/8222891
  • 4
    点赞
  • 0
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值