题解 | #不用加减乘除做加法#
不用加减乘除做加法
http://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215
题解
题目
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 数据范围:两个数都满足 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;
}
}