---
tags: codebook
---
{%hackmd theme-dark %}
# Base conversion
```cpp=
long long pow(long long a, int b) {
int ret = 1;
for (; b; b >>= 1, a *= a)
if (b & 1) ret *= a;
return ret;
}
const string& base_cvrt(string& str, int n, int m) {
int val = 0;
for (size_t i = 0; i != str.size(); i++)
val += (str[str.size() - i - 1] + (isalpha(str[str.size() - i - 1]) ? -'A' + 10 : -'0')) * pow(n, i);
string().swap(str);
while (val) str += val % m + (val % m >= 10 ? 'A' - 10 : '0'), val /= m;
reverse(str.begin(), str.end());
return str;
}
```