之前接触的都是像2进制,8进制等的正进制问题,这个星期做leetcode的周赛的时候,碰到了负进制的问题,有点懵逼,这里总结一下.
首先,思路是短除法,和正进制的思路一样.
其次要明白除法的规则:余数都是正数.被除数=商*除数+余数.例如(2进制):
正确的思路 计算机计算的商 计算机计算的余数
15 = 7 * 2 + 1 ----> 15 / 2 = 7 15 % 2 = 1
-15 = 8 * -2 + 1 ----> -15 / -2 = 7 -15 % -2 = -1
盗用 https://blog.csdn.net/yyyds/article/details/52075984 的图
因此,思路是:
(1)如果余数是正数,和之前一样没变化
(2)如果余数是负数,商++,余数 -= (-2)
string baseNeg2(int N) {
string res;
int temp;
if(N == 0) return "0";
while(N)
{