还是大佬厉害,我就只能一位一位地判断有没有进位
不用加减乘除做加法
http://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215
class Solution { public: int Add(int num1, int num2) { int a = num1; int b = num2; unsigned int m = 0x00000001; // 位置标志 unsigned int n = 0x00000000; // 进位标志 int rtn = 0x00000000; for (int i = 0; i < 32; i++) { if (bool(m&a)&&bool(b&m)) { // 该位都为1 if (bool(n)) rtn = (rtn | m); // 该位设为1 n = m << 1; // 向左有进位 } else if (bool(m&a) || bool(b&m)) { // 只有一位为1 if (bool(n)) { // 有低位进位,该位为0 n = m << 1; // 向左有进位 } else rtn = rtn | m; // 没有低维进位该位为1 } else { if (bool(n)) rtn = (rtn | m); // 有低位进位该位为1; n = 0x00000000; // 没有低位进位该位为1且不进位 } m = m << 1; } return rtn; } };