题解

题目

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 数据范围:两个数都满足 0≤n≤1000 进阶:空间复杂度 O(1)O(1),时间复杂

思路

因为题目要求不能使用四则运算符号+、-、*、/,首先我是考虑到了位运算,将这两个参数num1和num2都转为二进制补码形式,然后按位进行异或运算,最后得到的二进制数再转为十进制数。但是由于转为二进制也是需要使用/运算符号的,所以我只能放弃了这个思路,但是后来看到有大佬确实这样实现了。

那么我是怎么实现的呢?这里是仿照了某个大佬的思路,若num2>0,则遍历num2次,num1自增num2次,也就相当于将num2的值加给了num1,最后返回num1就是结果;若num2<0,num2自增到为0,num1也自减,最后返回num1就是结果。

代码

public class Solution {
    public int Add(int num1,int num2) {
        if(num2>0){
            for(int i=0;i<num2;i++){
                num1++;
            }
        }else if(num2<0){
            while(num2++!=0){
                num1--; //自减
            }
        }
        
        return num1;
    }
}