之前接触的都是像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)
        {
            temp = N % -2;
            N = N / -2;
            
            //重点地方
            if(temp < 0)
            {
                temp -= -2;
                N++;
            }
            res.push_back(temp + '0');
        }
        int lens = res.size() - 1;
        for(int i = 0; i <= lens / 2; i++)
        {
            char t = res[i];
            res[i] = res[lens - i];
            res[lens - i] = t;
        }
        return res;
    }

相关文章:

  • 2021-12-17
  • 2022-01-05
  • 2022-12-23
  • 2021-12-27
  • 2021-12-20
  • 2021-12-10
  • 2021-12-10
猜你喜欢
  • 2021-10-31
  • 2021-12-29
  • 2022-02-17
  • 2022-01-23
  • 2022-12-23
  • 2021-11-30
  • 2021-12-14
相关资源
相似解决方案