C++实现任意进制转换
2014-11-23 19:24
323 查看
使用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
相关文章推荐
- C++实现任意表达式求值(栈)
- C++ 实现按任意键继续~~~
- C++实现将十进制数转换为小于等于九的任意进制
- C++使用模板类实现任意类型switch和变量case
- 编程实现任意长度整数的加法(整数可以长度超出C++中int范围)
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- c++模板实现多参数任意传 - 方法实现
- C++通过ostringstream实现任意类型转string
- C++ 实现复制任意文件并显示完成百分比
- 《算法导论》中的查找任意顺序值的C++实现
- C++编写代码实现任意位数的水仙花判定
- c++递归实现关于无向图中任意两点的最短距离
- C++通过ostringstream实现任意类型转string
- C++通过ostringstream实现任意类型转string
- 基于C++任意点数的FFT/IFFT(时域和频域)实现
- c++实现任意矩阵求逆
- c++递归实现进制转换
- c++任意类型Any类的实现
- C++程序设计实践指导1.3求任意整数降序数改写要求实现
- 任意进制整数之间的相互转换(C++实现)