#include <stdio.h>
inline int abs(int x) {return (x > 0) ? x : -1 * x;}
int n, k;
int nk[16];
int len = 0;
int ans[50];
const char map[50] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q'};
void initNk() {
nk[len] = 1;
do {
len++;
nk[len] = k * nk[len - 1];
} while (abs(nk[len]) <= abs(n));
}
int main() {
scanf("%d%d", &n, &k);
int cpy = n;
initNk();
int cur;
for (int i = len; i >= 0; i--) {
if (n % nk[i] == 0) {
cur = n / nk[i];
n -= nk[i] * cur;
} else {
cur = n / nk[i] + 1;
n -= nk[i] * cur;
}
ans[len - i] = cur;
for (int i = len; i >= 0; i--) {
while (ans[i] >= -1*k) ans[i] -= -1*k, ans[i - 1] -= 1;
}
bool fronted = true;
printf("%d=", cpy);
for (int i = 0; i <= len; i++) {
if (fronted) {
if (ans[i] != 0) {
fronted = false;
} else {
continue;
}
}
//if (ans[i] == -1) {
//printf("1%c", map[-1*k-1]);
//continue;
//}
printf("%c", map[ans[i]]);
}
printf("(base%d)", k);
return 0;
}
本人逆天代码跑样例1会RE但是能AC 输入输出
30000 -2 30000=011010101110000(base-2)
(本人彩笔)但是构思的解决方案是注释掉的几行,请各位巨佬检查一下是否有误