P1017. 进制转换

考点

  • 进制

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;

int main() {
string ans;
int num, mod, p, q, r;
cin >> num >> mod;
p = num;
while (p || p % mod < 0) {
q = p;
r = p % mod, p /= mod;
while (r < 0) r = q - (++p * mod);
ans += (r >= 10 ? (char)(r - 10 + 'A') : (char)(r + '0'));
}
reverse(ans.begin(), ans.end());
cout << num << "=" << ans << "(base" << mod << ")";
return 0;
}

思路

和正常的进制转换一样使用短除法

但余数若为负数,得到的商要往回加,直到余数为正数