1. python 解法: 核心思想 无进位加法的结果 res = num1^num2, 有进位的结果 carry = (num1&num2)<<1。循环直到没有进位为止。 
   但是python与其他解法有区别,java c++ go等的int类型长度都是固定值,所以做num1^num2时已经把符号位(最高位,负数为1正数为0)给顺手计算好了,但是python的整数是没有固定位数的,所以每次计算完都要和0xffffffff进行&操作,来保证不会溢出,同时最后也要判断num 
   的正负。 
 # -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # write code here while num2: result = (num1 ^ num2) & 0xffffffff carry = ((num1 & num2) << 1) & 0xffffffff num1 = result num2 = carry if num1 <= 0x7fffffff: result = num1 else: result = ~(num1^0xffffffff) return result
2.java解法:同python
public class Solution {
    public int Add(int num1,int num2) {
        int  res = 0;
        int carry = 0;
        while(num2 != 0){
            res = num1^num2;
            carry = (num1&num2)<<1;
            num1 = res;
            num2 = carry;
        }
        return num1;
    }
}  package main
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param num1 int整型 
 * @param num2 int整型 
 * @return int整型
*/
func Add( num1 int ,  num2 int ) int {
    // write code here
    res := 0
    carry := 0
    for num2 != 0{
        res = num1^num2
        carry = (num1&num2)<<1
        num1 = res
        num2 = carry
    }
    return num1
} 
京公网安备 11010502036488号