思路分析
这题和正的进制转换一样,短除就可以,但是两个负数相%可能会得负数,负数除法可能也和我们要的结果不一样
如:我们想要:-3/-2=2
-3%-2=1(余数必须为正)
但系统:-3/-2=1
-3%-2=-1(显然系统负数相模可能会得负)
这一题理解很重要 你要知道负进制转换的工作原理才行
负进制和正进制其实没多大差别
只不过可能在某个数位上出现负数
你要做的就是从上一位借1来
没错 就和减法差不多
int n, r;
int main() {
cin >> n >> r;
string res; int m = n;
while (n != 0) {
int t = n % r; n /= r;
if (t < 0)n++, t -= r;//向上一位借位,同时将负的模数转化为正
if (t < 10)res += t + '0';
else res += t - 10 + 'A';
}
reverse(res.begin(), res.end());
printf("%d=%s(base%d)\n", m, res.c_str(), r);
}