实现各种进制转换(c++版)
Posted 三国小梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现各种进制转换(c++版)相关的知识,希望对你有一定的参考价值。
前言
我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。
例如:十进制的10转换为二进制
10÷2=5···0
5÷2=2···1
2÷2=1···0
1÷2=0···1
直到商为0,然后把余数倒着写,所以10的二进制表示为1010。
十进制->N进制
会了十进制转换为二进制,那么十进制转换为任意进制也就迎刃而解了,只要不停的除法和取余就好了。
#include <iostream>
#include <cstdio>
#include <stack>
/*
* 进制转换 10——>n(n<10)
* */
using namespace std;
void ConvertT2N(int number,int n)
stack<char> s;
if (number == 0) //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了
s.push(0);
else
while (number)
s.push(number % n);
number /= n;
// 把栈中的余数输出
while (!s.empty())
printf("%d", s.top());
s.pop();
printf("\\n");
int main()
int number;
while (scanf("%d", &number) != EOF)
ConvertT2N(number, 2);
return 0;
但是上面的代码是有一点小问题的,它只能转换10以内的进制,也就是N必须小于10,否则就会出错。例如十进制转换成十六进制就会出错。例如11转换成十六进制表示为b而不是11,因为当表示十进制以上的数时需要用到字母a,b,c,d等等。
所以需要在输出的余数上面加加工一下,把大于10的数用字母表示。
改进版代码如下:
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
// 把整数转换成对应进制的字符,例如10的十六进制中表示为A
char Int2Char(int target)
if (target < 10)
return target + \'0\';
else
return target - 10 + \'A\';
/*
* 现在N可以取任意进制了
* */
void ConvertT2N(int number,int n)
stack<char> s; //因为要存字母所以用char
if (number == 0) //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了
s.push(0);
else
while (number)
s.push(Int2Char(number % n)); //在余数入栈时加工一下,把int转换成char
number /= n;
// 把栈中的余数输出
while (!s.empty())
printf("%c", s.top());
s.pop();
printf("\\n");
int main()
int number;
while (scanf("%d", &number) != EOF)
ConvertT2N(number, 16);//把十进制转换为十六进制
return 0;
N进制转换成十进制
会了十进制转换为N进制,那么把N进制转换为十进制倒着来就好了,不停的乘N,加上余数。
例如:二进制的1010转换为十进制
0*2+1=1
1*2+0=2
2*2+1=5
5*2+0=10
#include<iostream>
#include<cstdio>
using namespace std;
/*
* 进制转换 N->10
* */
// 先把字母转换成数字
int Char2Int(char target)
if (target >= \'0\' && target <= \'9\')
return target - \'0\';
else
return target - \'A\' + 10;
void ConverM2T(string str,int m)
int number = 0; //该数在10进制下的表示
for (int i = 0; i < str.size(); ++i)
number *= m;
number += Char2Int(str[i]);
printf("%d\\n", number);
int main()
string str;
while (cin >> str)
ConverM2T(str,16); //把十六进制转换为十进制
return 0;
M进制转换为N进制
上述前两个都会了以后,实现把M进制转换成N进制了,思路是先把M进制转换成十进制,然后再把十进制的数转换成N进制。
#include <iostream>
#include <cstdio>
#include <stack>
#include <string>
using namespace std;
/*
* M进制转换成N进制
* */
int Char2Int(char target)
if (target >= \'0\' && target <= \'9\')
return target - \'0\';
else
return target - \'A\' + 10;
// M进制转换成十进制的数返回
int ConverM2T(string str,int m)
int number = 0; //该数在10进制下的表示
for (int i = 0; i < str.size(); ++i)
number *= m;
number += Char2Int(str[i]);
return number;
char Int2Char(int target)
if (target < 10)
return target + \'0\';
else
return target - 10 + \'a\';
//十进制转换成N进制
void ConvertT2N(int number,int n)
stack<char> s;
while (number)
s.push(Int2Char(number % n));
number /= n;
if (s.empty()) //当输入是0时,输出也是0
printf("0");
while (!s.empty())
printf("%c", s.top());
s.pop();
printf("\\n");
int main()
int m,n;
while (scanf("%d%d",&m,&n)!=EOF)
string str;
cin >> str;
int number = ConverM2T(str, m);// M进制转换成十进制的数返回
// 再把该数转换成N进制
ConvertT2N(number, n);
return 0;
以上是关于实现各种进制转换(c++版)的主要内容,如果未能解决你的问题,请参考以下文章