最初看到这题的时候,我很懵逼,世上咋还会有基数是负数的情况?但仔细想想十进制加法,无非从低位到高位遍历两个数num1和num2,num1【i】表示数字num1的第i位,carry表示进位,sum=num1【i】+num2【i】+carry:
- 若sum<10,则answer【i】=sum,carry=0;
- 否则,answer【i】=sum-10,carry=1;
解释为啥进位的时候carry要等于1:sum大于等于10的时候,说明超出了第i位的表示范围,必须向高位i+1进位。此时第i位表示的数换成十进制是sum*10^i=(sum-10)*10^i + 10*10^i,10*10^i是超出部分,这部分无非就是向i+1位进1。
同理二进制加法:
sum*2^i = (sum-2)*2^i + 2*2^i
- 若sum<2,则answer【i】=sum,carry=0;
- 否则,answer【i】=sum-2,carry=1;
同理-2进制加法:
2*(-2)^i = (-1)*(-2)*(-2)^i ;
(-1)*(-2)^i = 1*(-2)^i +(-2)*(-2)^i ;
3*(-2)^i = 1*(-2)^i + (-1)*(-2)*(-2)^i;
- 若sum=0,1,则answer【i】=sum,carry=0;
- 若sum=2,则answer【i】=0,carry=-1;
- 若sum=-1,则answer【i】=1,carry=1;
- 若sum=3;则answer【i】=1,carry=-1;