黑河网站建设公司,wordpress删除媒体库,flash网站带后台,在线教育 wordpress1.题目#xff1a; 写一个函数#xff0c;求两个整数之和#xff0c;要求在函数体内不得使用、-、*、/四则运算符号。 数据范围#xff1a;两个数都满足 −10≤#xfffd;≤1000−10≤n≤1000 进阶#xff1a;空间复杂度 #xfffd;(1)O(1)#xff0c;时间复杂度 写一个函数求两个整数之和要求在函数体内不得使用、-、*、/四则运算符号。 数据范围两个数都满足 −10≤≤1000−10≤n≤1000 进阶空间复杂度 (1)O(1)时间复杂度 (1)O(1) 题目链接不用加减乘除做加法_牛客题霸_牛客网 2.简单介绍加法原理
先来看看十进制的加法原理 在计算十进制的加法时我们将相同数位对其然后进行10以内的加法如果满10我们就往前进1 同理二进制的加法原理也是类似的 在计算二进制的加法时我们也是将相同数位对其然后进行2以内的加法如果满2我们就往前进1 3.怎么知道是否该进位以及怎么进位和怎么得到结果
3.1怎么知道是否该进位 1.在计算机语言中每一个数字都有自己的源码反码补码而这些源码反码补码都是以二进制的方式呈现的 2.在二进制中所有的数都是由0和1组成的比如3的二进制数为11,4的二进制数为100 3.在C语言中位操作符 (按位与)的作用是如果两个数的二进制的相同数位都为1结果才为1否则为0 3.2怎么进位呢 1.这里会使用到左移操作符 左移操作符就是二进制数向左移动右侧补0 列如01101左移一位就是11010 2. 101011101110001100011100010 3.3怎么得到结果 1.除了知道了该进位的数位也要知道不需要进位的数位 2.怎么获得不需要进位的数位呢 这里要使用按位异或操作符^ 我们知道当两个加数对应数位都为1或0时结果的对应数位为0只有当两个对应数位只 有一个1时结果的对应数位才为1.没考虑加上进位的情况 这里我们得到了不需要进位的数位上的数然后我们用这个数加上进位的那个数 虽然我们用进位的数加上不需要进位的数但是我们发现在两者进行相加时还会出现进位的情况这个怎么处理呢 很简单只要我们重复之前的操作直到进位的数为0时就不需要进位了 后面就只需要写个递归或者循环就可以了 4.来看代码实现
1.递归版
int Add(int num1, int num2 ) { //当我们一进来就把num2当做进位的那个数
if(num20)//我们将进位的数存在num2中不需要进位的数存在num1中
return num1;//当不需要进位时num1就为两个数的和
elsereturn Add(num1^num2,(num1num2)1);//如果需要进位我们就重复之前的操作
}
2.循环版
int Add(int num1, int num2 ) {
while(num2!0)//num2依然是存进位的num1是不需要进位的
{
int tmpnum1;//因为下面num1^num2会改变之前获得的num1所以需要提前保留一份num1的值
num1^num2;
num2(tmpnum2)1;
}
return num1;
}