进制转换
1.算法分析
短除法是用来将一个数字从n进制转换为m进制的算法。
2.模板
2.1 2进制转换为10进制
string s;
cin >> s;
for (int j = 0; j < m; ++j) a[i] = a[i] * 2 + s[j] - '0'; // 把一个01字符串s转换为对应的十进制:101 -> 5
2.2 10进制转换为2进制
for (int i = 0; i < m; ++i) res[i] = k % 2, k /= 2; // 把十进制的k转化为2进制,存储于res内,res存储的是倒序。6 -> 110
for (int i = m - 1; i >= 0; --i) cout << res[i]; // 因为存储的是倒序,因此要逆着输出
2.3 n进制转换为m进制
// 把str从n进制转换为m进制
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
typedef long long LL;
int n, m;
char str1[N], str2[N];
int t[N], ans[N];
int getnum(char ch) {
//字符转数字
if (ch <= '9')
return ch - '0';
else if (ch <= 'Z')
return 10 + ch - 'A';
else
return 36 + ch - 'a';
}
char getch(int num) {
//数字转字符
if (num <= 9)
return num + '0';
else if (num <= 35)
return num - 10 + 'A';
else
return num - 36 + 'a';
}
void solve() {
int len = strlen(str1);
for (int i = 0; i < len; i++) //先把字符串变成数组,高位->低位
t[i] = getnum(str1[i]);
int j = 0, k = 0;
while (j < len) {
for (int i = j; i < len - 1; i++) {