十进制转m进制
//十进制n转为m进制数
char IntToChar(int a) {//数字转为字符
if (a < 10) return '0' + a;
else return 'A' + a - 10;
}
int n, m; cin >> n >> m;
vector<char> result;
while(n){
result.push_back(IntToChar(n % m));
n /= m;
}
for (int i = result.size() - 1; i >= 0; i--)//逆序输出
cout << result[i];
m进制转为十进制
//m进制数s转为10进制数
int CharToInt(char c) {//字符转数字
if (c >= '0' && c <= '9') return c - '0';
else return c - 'A' + 10;
}
long long sum = 0;
for (int i = 0; i < s.size(); ++i) {
sum *= m;
sum += CharToInt(s[i]);
}
cout << sum << endl;
长十进制和二进制相互转换
//十进制转为二进制
string Divide(string str, int x) {//自定义字符串除法
int remainder = 0;
for (int i = 0; i < str.size(); ++i) {
int cur = remainder * 10 + str[i] - '0';
str[i] = cur / x + '0';
remainder = cur % x;
}
int pos = 0;
while(str[pos] == '0') pos++;
return str.substr(pos);
}
vector<int> binary;//存结果
while(str.size() != 0) {
int last = str[str.size() - 1] - '0';
binary.push_back(last % 2);
str = Divide(str, 2);
}
for (int i = binary.size() - 1; i >= 0; --i) {//逆序输出
cout << binary[i];
}
//二进制转为十进制
string Multiple(string str, int x) {//自定义字符串乘法
int carry = 0;
for (int i = str.size() - 1; i >= 0; --i) {
int current = x * (str[i] - '0') + carry;
str[i] = current % 10 + '0';
carry = current / 10;
}
if (carry != 0) {
str = "1" + str;
}
return str;
}
string Add(string str, int x) {//自定义字符串加法
int carry = x;
for (int i = str.size() - 1; i >= 0; --i) {
int current = (str[i] - '0') + carry;
str[i] = current % 10 + '0';
carry = current / 10;
}
if (carry != 0) {
str = "1" + str;
}
return str;
}
string s; cin >> s; //s为二进制串
string answer = "0";
for (int i = 0; i < s.size(); ++i) {
answer = Multiple(answer, 2);
answer = Add(answer, s[i]);
}
cout << answer;