1.十进制 转为 二、八、十六进制
输入一个十进制数n,得到其 f 进制数,f = {2, 8, 16}
代码:
#include <iostream>
using namespace std;
int main()
{
int n; cin >> n;
// 数组a[]存储 某进制 某一位 的所有可能值
char a16[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int a8[8] = {0,1,2,3,4,5,6,7};
int a2[2] = {0, 1};
// 数组b[]倒序存储转化得到的new_n的每一位,new_n有idx位
char b16[1010];
int b8[1010];
int b2[1010];
int idx = 0;
// 十进制转化为f进制,f = {2, 8, 16}
int f = 16;
// 先取new_n的末位,然后依次往前
int t = 0;
while(n || t) {
t = n / f;
b16[idx++] = a16[n%f];//十六进制
// b8[idx++] = a8[n%f]; //八进制
// b2[idx++] = a2[n%f]; //二进制
n = t;
f *= 16;// 2, 8, 16
}
for(int i=idx-1; i>=0; i--) cout << b16[i];
// cout << b8[i];
// cout << b2[i];
return 0;
}
2. 二、八、十六进制 转为 十进制
输入一个 f 进制字符串s,f = {2, 8, 16},得到其十进制数。
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s; cin >> s;
// pow(f, 0) = 1;
int f = 1;
// res = new_n
int res = 0;
// 十六进制
for(int i=s.size()-1; i>=0; i--) {
if(s[i] >= 'A' && s[i] <= 'F')
res += (s[i] - 55) * f;
else res += (s[i] - '0') * f;
f *= 16;
}
// 二进制 and 八进制
// for(int i=s.size()-1; i>=0; i--) {
// res += (s[i] - '0') * f;
// f *= 8;//2, 8
// }
cout << res << endl;
return 0;
}
3. 任意互转
将十进制看作成一个中转站,可将二、八、十六进制转化为十进制后再转为其他进制。
eg: 将二进制1010转化为十进制10,再转化为八进制12,或十六进制A。